Haskell 句柄的非阻塞关闭

Non-blocking close of Haskell Handle

我们有两个线程写入 Handle wrapping a Socket。 Handle 很有用,因为它周围的 MVar 确保一次只能有一个线程写入它。

我们要求其中一个线程应该能够关闭句柄,即使另一个线程正在写入它——写入调用应该收到一个错误。问题是 hclose 函数会阻塞,直到它具有独占访问权限。解决此问题的最佳方法是什么?

IIRC 写入处理锁定 Handle,因此您有两个选择:使用异步异常中止操作或使其成为非阻塞的(例如,使用 hPutBufNonBlocking 尝试写入和 threadWaitWrite等待发送数据)。