当前位置: 首页 > 编程语言 > C#

如何让我的方法等待所有线程完成?Share

时间:2023-04-10 23:06:42 C#

我如何让我的方法等待所有线程完成?我有一个方法可以触发一个线程来做一些工作。会有2个线程异步运行一段时间,当它们的回调方法被调用时,回调会触发另一个线程,直到所有工作完成。我怎样才能让我的方法等待所有这些线程完成并被解雇?Interlocked.Increment在任何线程启动之前初始化为零的计数器。环环相扣。在退出/环回之前递减每个线程中的计数器。如果任何线程将计数器递减为零,则Set()一个AutoResetEvent。AutoResetEvent上的WaitOne()。Rgds,Martin只需为所有线程调用Join。所以,如果你有两个线程变量:thread1.Join();thread2.Join();或者,如果您有一个集合:foreach(Threadthreadinthreads){thread.Join();线程完成的顺序无关重要;在所有线程完成之前,代码不会继续。但是,如果你一直在创建新线程,这可能不是很有用......你可能想要一些只能在锁中访问的集合(例如队列),并让每个线程产生的活动添加队列中的新线程...然后迭代(小心!)直到队列为空:while(true){ThreadnextThread;锁(collectionLock){如果(queue.Count==0){break;}nextThread=queue.Dequeue();}下一个线程。加入();理想情况下,如果您使用的是.NET4,请尝试使用TaskParallel库-它使很多事情变得更容易:)使用WaitHandles,每个线程都应该有一个WaitHandle,如ManualResetEvent,并在事件发生时调用Set()完毕。main方法应该使用WaitHandle.WaitAll为每个线程传入句柄。IListwaitHandles=newList();varnewThread=newThread(newParameterizedThreadStart((handle)=>{//线程的东西放在这里((ManualResetEvent)handle).Set();}));varmanualResetEvent=newManualResetEvent(false);waitHandles.Add(manualResetEvent);newThread.Start(manualResetEvent);//类似地创建其他线程//等待所有线程完成-指定超时以防止线程未能设置事件时出现死锁WaitHandle.WaitAll(waitHandles.ToArray());最简单的情况,可以使用Join以上是C#学习教程:HowdoImakemymethodwaitforallthreadstocomplete?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——Threading.ThreadmyThread1=newThread(newThreadStart(Worker1));Threading.ThreadmyThread2=newThread(newThreadStart(Worker2));我的Thread1.Start();我的Thread2.Start();我的Thread1.Join();我的Thread2.Join();如需转载请注明出处: