相关疑难解决方法(0)

C#:等待所有线程完成

我正在编写我正在编写的代码中的常见模式,我需要等待组中的所有线程完成,并且超时.超时应该是所有线程完成所需的时间,因此简单地为每个线程执行thread.Join(timeout)将不起作用,因为可能的超时是超时*numThreads.

现在我做类似以下的事情:

var threadFinishEvents = new List<EventWaitHandle>();

foreach (DataObject data in dataList)
{
    // Create local variables for the thread delegate
    var threadFinish = new EventWaitHandle(false, EventResetMode.ManualReset);
    threadFinishEvents.Add(threadFinish);

    var localData = (DataObject) data.Clone();
    var thread = new Thread(
        delegate()
        {
            DoThreadStuff(localData);
            threadFinish.Set();
        }
    );
    thread.Start();
}

Mutex.WaitAll(threadFinishEvents.ToArray(), timeout);
Run Code Online (Sandbox Code Playgroud)

但是,对于这种事情,似乎应该有一个更简单的习语.

c# multithreading

63
推荐指数
6
解决办法
10万
查看次数

标签 统计

c# ×1

multithreading ×1