* Parts of System.Console.Concurrent may not be async exception safe. If a thread is running an action from that module and an async exception is sent to it, it may result in a deadlock or other problem. (System.Console.Regions has been made safe.) * Calling setConsoleRegion with something that throws an error will cause no further display updates to happen. The exception in the thunk will crash the displayThread, and that is not waited on until the action passed to displayConsoleRegions finishes, so the exception is deferred to that point. Of course if the action never finishes, that hides the exception. It does seem this should be improved, by catching the crashing displayThread and ideally propigating the exception immediately. But displayConsoleRegions would need to use a different class than the current MonadIO to be able to do that. Eg, MonadBaseControl so lifted-async can be used, or a class that lets the action be canceled. Or it could be dealt with by having setConsoleRegion force the thunk before passing it over to the displayThread. But the instance ToRegionContent (STM Text) seems to prevent doing that.