c# - 当所有后台线程池线程完成时得到通知

标签 c# multithreading threadpool

当我使用 ThreadPool 启动 3..10 个线程时,我有一个场景。 每个线程完成其工作并返回到线程池。 当所有后台线程都完成时,在主线程中通知的可能选项有哪些?

目前,我正在使用自己开发的方法,为每个创建的线程递增一个变量,并在后台线程即将结束时递减它。 这工作得很好,但我很好奇是否有更好的选择。

最佳答案

除非使用 Interlocked.Decrement 完成,否则(在线程之间)递减一个变量有点冒险,但如果你有最后一个线程(即当它变为零时)raise,这种方法应该没问题一个事件。请注意,它必须位于“finally” block 中,以避免在异常情况下丢失它(另外你不想终止进程)。

在“Parallel Extensions”(或 .NET 4.0)中,您还可以查看此处的 Parallel.ForEach 选项……这可能是将所有内容作为一个 block 完成的另一种方式。无需手动观看它们。

关于c# - 当所有后台线程池线程完成时得到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/358721/

相关文章:

c# - .NET中是否有类似于Qt::QueuedConnection的东西?

c++ - C++中是否有可等待的队列?

.NET 或 Windows 同步原语性能规范

java - 线程池性能比较: Local vs Remote

c# - Mono编译时如何引用Microsoft.Boogie?

c# - Orleans grain 代码中的响应式(Reactive)扩展

Java:尽管执行非常简单的任务,线程仍需要很长时间才能完成

java - 如果发生异常则停止ThreadPool中的所有线程

c# - 在gridview中显示百分比值

c# - 在 C# .NET 中通过服务帐户而不是个人帐户进行身份验证以使用 Google 表格