Sai*_*int 2 c# multithreading loops thread-safety .net-3.5
如何在另一个线程中运行每个for循环调用,但是ExternalMethod的延续应该等待从for循环结束最后一个工作线程(和同步)?
ExternalMethod()
{
//some calculations
for (int i = 0; i < 10; i++)
{
SomeMethod(i);
}
//continuation ExternalMethod
}
Run Code Online (Sandbox Code Playgroud)
一种方法是使用a ManualResetEvent.
请考虑以下代码(请注意,这不应被视为一个工作示例,卡在OSX上,因此不要让VS也不要使用C#编译器来检查它):
static ManualResetEvent mre = new ManualResetEvent(false);
static int DoneCount = 0;
static int DoneRequired = 9;
void ExternalMethod() {
mre.Reset();
for (int i = 0; i < 10; i++) {
new Thread(new ThreadStart(ThreadVoid)).Start();
}
mre.WaitOne();
}
void ThreadVoid() {
Interlocked.Increment(ref DoneCount);
if (DoneCount == DoneRequired) {
mre.Set();
}
}
Run Code Online (Sandbox Code Playgroud)
重要 - 这可能不是最好的方法,只是一个使用的例子ManualResetEvent,它将完全适合您的需求.
如果您使用的是.NET 4.0,则可以使用Parallel.For循环 - 在此处进行说明.
| 归档时间: |
|
| 查看次数: |
3190 次 |
| 最近记录: |