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循环不能同时/并行.
Parallel.Foreach如果您的目标是同时运行这些目标,则无需使用.简单地去了所有的群体,创建任务为每个做一组foreach的SendAsync,让所有的任务,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)
| 归档时间: |
|
| 查看次数: |
1446 次 |
| 最近记录: |