C# 在类的一个实例上进行线程池,如何等待所有线程完成?

C# 在类的一个实例上进行线程池,如何等待所有线程完成?,c#,threadpool,C#,Threadpool,考虑下面的代码。我不想创建多个类的实例。(因此我不能使用ManualResetEvent类) 使用系统; 使用系统线程; 公务舱服务员 { 静态整数计数器=0; 静态int max=20; 公开作废开始() { 对于(int i=1;i,不带Console.Read()的应用程序,在所有线程结束之前退出 2> 语句Console.WriteLine(“所有线程完成”);执行两次 如何修复此问题?改用,然后您就可以执行此操作了 另外,通过工厂实例化您的任务: Task.Factory.StartN

考虑下面的代码。我不想创建多个
类的实例。(因此我不能使用ManualResetEvent类)

使用系统;
使用系统线程;
公务舱服务员
{
静态整数计数器=0;
静态int max=20;
公开作废开始()
{
对于(int i=1;i,不带
Console.Read()
的应用程序,在所有线程结束之前退出

2> 语句
Console.WriteLine(“所有线程完成”);
执行两次

如何修复此问题?

改用,然后您就可以执行此操作了

另外,通过工厂实例化您的任务:

Task.Factory.StartNew(() => { Console.Writeline(""); });
它将为您使用线程池。

您应该使用来递增
计数器。
。因为当两个线程试图同时递增时,存在争用条件

如果您想让多个
Writer
实例同时工作,那么就不能有一个静态
计数器
变量。它们会相互冲突。只要将其设置为私有实例变量,您就可以了。Max应该是
常量
只读
(并保持静态)如果它从未更改,或者如果它可以更改,它也应该是一个实例字段

最后,如果您有一个非静态的
ManualResetEvent
实例,您可以在
Start
中创建它,将其初始化为set,在循环结束时等待它,然后在最后一个线程完成时发信号给它(您当前只需写入控制台)

Task.Factory.StartNew(() => { Console.Writeline(""); });