并行执行使用异步的循环

Jef*_*ier 4 c# parallel-processing concurrency asynchronous async-await

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

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

为了清楚起见,由于SendAsync()的运行方式,foreach循环的每个副本必须按顺序执行; 换句话说,foreach循环不能同时/并行.

i3a*_*non 5

Parallel.Foreach如果您的目标是同时运行这些目标,则无需使用.简单地去了所有的群体,创建任务为每个做一组foreachSendAsync,让所有的任务,await他们都用一次Task.WhenAll:

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