我正在启动多个线程,并想知道其中任何一个何时完成。我知道以下代码:
foreach (Thread t in threads)
t.Join();
但它只会等待所有线程在一起。那太晚了。我需要知道一个线程何时完成,即使其他线程仍在运行。我正在寻找WaitAny
仅适用于线程的东西。但我无法向我正在监视的所有线程添加代码,因此不能选择使用信号或其他同步对象。
一些澄清:我正在开发一个应该记录应用程序活动的日志记录/跟踪工具。我可以在线程启动时插入日志语句,但我不能在线程外的所有可能方式上插入日志语句(多个退出点、异常等)。所以我想注册新线程,然后在它完成写入日志条目时收到通知。我可以在每个线程上异步Join
,但这意味着每个受监控线程都有第二个线程,这可能看起来有点多开销。线程以各种方式使用,无论是BackgroundWorker
线程Task
还是池线程。从本质上讲,它是一个线程,我想知道它什么时候完成。确切的线程机制由应用程序定义,而不是日志记录解决方案。