为什么Parallel.ForeachAsync使用我的盒子上使用AsyncManualResetevent等待的所有线程?
我要完成的工作是在处理其余的过程之前获得特定的记录。
不幸的是,在处理其余的之前,我没有自由列举两次以获取所需的1张记录。我确实知道我要寻找的记录将是枚举中的第一批记录之一,但我的理解是并行。foreachasync
不能保证订单。
这是我如何在项目中使用它的缩小版本。从概念上讲,但更基础。我正在使用。
如果运行它,它会冻结,因为它使用框上的所有可用线程。
我的想法是 waitasync
将允许线程进行其他工作。因此,我对 Parallel.ForeachAsync
asyncManualResetevent 的理解是一个缺陷。
任何人都知道如何使用并行解决此问题。ForeachAsync
或其他并行机制?
var mre = new AsyncManualResetEvent();
await Parallel.ForEachAsync(Enumerable.Range(1, 1000), async (i, _) =>
{
Console.WriteLine("iteration {0}", i);
if (i == 20)
{
Console.WriteLine("begin set {0}", i);
mre.Set();
}
await mre.WaitAsync().ConfigureAwait(false);
Console.WriteLine("released {0}", i);
// Do work now that we have 20
}).ConfigureAwait(false);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论