【发布时间】:2013-01-23 02:45:22
【问题描述】:
我对 WaitHandle.WaitAll 的工作有疑问,希望能提供任何帮助。
假设我有这样的情况:父线程正在打开几个子线程,并且必须等待“做其他事情”,直到子线程完成它们的工作。
我使用 WaitHandle.WaitAll 并希望继续使用此方法。 (NO Thread.Join 等,请 :))
ManualResetEvent[] events = new ManualResetEvent[list.Count];
foreach (string row in list)
{
events[i] = new ManualResetEvent(false);
Thread thread = new Thread(new ParameterizedThreadStart(DoSomething));
thread.Start(events[i]); // start child thread
System.Threading.Thread.Sleep(1000000);
i++;
}
WaitHandle.WaitAll(events); // wait for child threads finish their work
...
...
private DoSomething(object sth)
{
// some stuff that executes only 1 second
ManualResetEvent.Set()
}
所以第一个新启动的子线程的情况是 ManualResetEvent.Set() 的调用在父线程中调用 WaitHandle.WaitAll(events) 之前。因为打开新子线程的循环有很长的超时时间。
所以我的问题是,这样的时间线不是问题吗? 在调用 ManualResetEvent.Set() 之前不应该调用 WaitHandle.WaitAll 吗?
【问题讨论】:
-
不要使用
ManualResetEvents和Threads,听起来如果你使用Tasks和Task.WaitAll()会更好。
标签: c# .net multithreading