【问题标题】:Run async await tasks in parallel in Asp.net Core在 Asp.net Core 中并行运行异步等待任务
【发布时间】:2021-07-22 16:08:22
【问题描述】:
List<Employee> employeeList = new List<Employee>();
List<Event> eventList = new List<Event>();

//Wanted to execute each foreach call asynchronously, to improve performance
foreach (var account in accounts)
{
    var context = await GetContext(account); 
    
    //following two await is depends on above result
    var employees = await _employeeService.List(context);
    var events = await _eventService.List(context).ConfigureAwait(false);
    //Question is how to execute above two await calls parallely
    employeeList.AddRange(employees);
    eventList.AddRange(events);
}

我想同时启动两个长期运行的任务(员工和事件)。那么也许我们可以为上面的每个帐户实现并行执行来解决这个问题?

【问题讨论】:

  • await Task.WhenAll(accounts.Select(acc =&gt; doSomethingAsync(acc)).ToArray())
  • @PareshBijarane 在这种情况下,正确的术语是并发,而不是并行。你可以阅读更多关于这个here的信息。

标签: c# asp.net-core async-await


【解决方案1】:

如果您只希望循环内的每个调用是并行的 -

List<Employee> employeeList = new List<Employee>();
List<Event> eventList = new List<Event>();
foreach (var account in accounts)
{
    var context = await GetContext(account);
    var employeesTask = _employeeService.List(context);
    var eventsTask = _eventService.List(context);
    await Task.WhenAll(employeesTask , events).ConfigureAwait(false);
    var employees = await employeesTask.ConfigureAwait(false);
    var events= await eventsTask.ConfigureAwait(false);    
    employeeList.AddRange(employees);
    eventList.AddRange(events);
}

【讨论】:

    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2015-10-06
    • 2014-09-06
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    相关资源
    最近更新 更多