对于许多线程中的循环

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)

Rud*_*ser 5

一种方法是使用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循环 - 在此处进行说明.