gpt4 book ai didi

c# - 等待池线程完成

转载 作者:IT王子 更新时间:2023-10-29 03:59:20 24 4
gpt4 key购买 nike

很抱歉提出了一个多余的问题。但是,我找到了很多解决问题的方法,但没有一个得到很好的解释。我希望在这里能清楚地说明这一点。

我的 C# 应用程序的主线程使用线程池生成 1..n 个后台工作程序。我希望在所有工作人员完成之前锁定原始线程。我特别研究了 ManualResetEvent,但我不清楚它的用途。

伪:

foreach( var o in collection )
{
queue new worker(o);
}

while( workers not completed ) { continue; }

如有必要,我会事先知道即将排队的 worker 数量。

最佳答案

试试这个。该函数接收一个 Action 委托(delegate)列表。它将为列表中的每个项目添加一个 ThreadPool worker 条目。它将等待每个操作完成后再返回。

public static void SpawnAndWait(IEnumerable<Action> actions)
{
var list = actions.ToList();
var handles = new ManualResetEvent[actions.Count()];
for (var i = 0; i < list.Count; i++)
{
handles[i] = new ManualResetEvent(false);
var currentAction = list[i];
var currentHandle = handles[i];
Action wrappedAction = () => { try { currentAction(); } finally { currentHandle.Set(); } };
ThreadPool.QueueUserWorkItem(x => wrappedAction());
}

WaitHandle.WaitAll(handles);
}

关于c# - 等待池线程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com