无论出于何种原因,ThreadPool
的{{1}}都不会返回工作项的QueueWorkItem
或其他句柄,这样就可以等到它完成。有IAsyncResult
个方法,但您必须传递RegisterWait...
并且创建它们的费用很高(请参阅WaitHandle
文档,建议您在请求之前延迟创建IAsyncResult
。任务并行库将解决这个问题,但在可用之前需要等待很长时间。那么,这个设计有什么问题:
WaitHandle
答案 0 :(得分:6)
嗯,你在获取WaitHandle和设置它之间遇到了竞争条件。如果他们碰巧有点迟到,你真的希望呼叫者永远等待吗?
你应该做一些适当的锁定并保持一个“我已经完成”的标志,这样如果你做在它完成后创建WaitHandle,你可以在返回之前设置它。
我还会亲自编写一个静态工厂方法,而不仅仅是使用公共构造函数 - 或者将其设置为“create and then 显式启动”模式。在构造函数中排队工作项对我来说很奇怪。
答案 1 :(得分:3)