gpt4 book ai didi

c# - 并行执行使用异步的循环

转载 作者:太空狗 更新时间:2023-10-30 01:03:35 25 4
gpt4 key购买 nike

我正在编写一个 Windows 服务,并且正在寻找一种方法来并行执行多个 foreach 循环,其中每个循环调用一个异步 (TAP) 方法。我最初尝试了以下代码,它不起作用,因为 Parallel.ForEach 和 async/await 不兼容。有谁知道是否有替代方法可以实现这一目标?

Parallel.ForEach(messagesByFromNumber, async messageGroup =>
{
foreach (var message in messageGroup)
{
await message.SendAsync();
}
});

为了清楚起见,由于 SendAsync() 的操作方式,foreach 循环的每个副本都必须串行执行;换句话说,foreach 循环不能变为并发/并行。

最佳答案

如果您的目标是同时运行这些,则无需使用 Parallel.Foreach。只需遍历所有组,为执行 SendAsyncforeach 的每个组创建一个任务,获取所有任务,然后全部await立即使用 Task.WhenAll:

var tasks = messagesByFromNumber.Select(async messageGroup =>
{
foreach (var message in messageGroup)
{
await message.SendAsync();
}
});
await Task.WhenAll(tasks)

关于c# - 并行执行使用异步的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27725361/

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