我具有一些异步功能,并且希望将其分发以对其进行处理。
1-假设我有X个用户(登录); 2-对于每个用户,我必须执行一些任务;
//示例
foreach (var login in logins)
{
if (! await _serviceLoginInjected.LogIn (login)) // Injected service
{
continues;
}
await _serviceLoginInjected.SendEmails();
await _serviceLoginInjected.CreateFiles();
await _serviceLoginInjected.DoSomethingElse();
}
我真的不知道如何完成这些任务。
答案 0 :(得分:0)
创建一组批处理,然后为该批处理中的每个项目创建任务(并行)
async Task Main()
{
var batchSize = 10;
var batches = logins.Select((item, inx) => new { item, inx })
.GroupBy(x => x.inx / batchSize)
.Select(g => g.Select(x => x.item));
foreach (var batch in batches)
{
var tasks = new List<Task>(batchSize);
foreach (var login in batch)
{
tasks.Add(DoWork());
}
await Task.WhenAll(tasks);
}
}
public async Task DoWork()
{
if (await _serviceLoginInjected.LogIn(login))
{
await _serviceLoginInjected.SendEmails();
await _serviceLoginInjected.CreateFiles();
await _serviceLoginInjected.DoSomethingElse();
}
}