当我使用 ThreadPool 启动 3..10 个线程时,我有一个场景。 每个线程完成其工作并返回到线程池。 当所有后台线程都完成时,在主线程中通知的可能选项有哪些?
目前,我正在使用自己开发的方法,为每个创建的线程递增一个变量,并在后台线程即将结束时递减它。 这工作得很好,但我很好奇是否有更好的选择。
最佳答案
除非使用 Interlocked.Decrement
完成,否则(在线程之间)递减一个变量有点冒险,但如果你有最后一个线程(即当它变为零时)raise,这种方法应该没问题一个事件。请注意,它必须位于“finally” block 中,以避免在异常情况下丢失它(另外你不想终止进程)。
在“Parallel Extensions”(或 .NET 4.0)中,您还可以查看此处的 Parallel.ForEach
选项……这可能是将所有内容作为一个 block 完成的另一种方式。无需手动观看它们。
关于c# - 当所有后台线程池线程完成时得到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/358721/