nun*_*unu 14 .net c# parallel-processing multithreading task-parallel-library
我想在一个List集合中组合2个任务的结果.
确保 - 我想并行运行这两种方法.
List<Employee> totalEmployees = new List<Employee>();
Run Code Online (Sandbox Code Playgroud)
方法一:
public async Task<IEnumerable<Employee>> SearchEmployeeFromDb();
Run Code Online (Sandbox Code Playgroud)
方法2:
public async Task<IEnumerable<Employee>> GetEmployeeFromService();
Run Code Online (Sandbox Code Playgroud)
现在,我想在totalEmployees字段中保存这两个方法的结果,这两个方法也应该异步运行.
i3a*_*non 22
虽然许多答案都很接近,但最干净,最有效的选择是Task.WhenAll结合使用SelectMany:
async Task<IEnumerable<Employee>> Combine()
{
var results = await Task.WhenAll(SearchEmployeeFromDb(), GetEmployeeFromService());
return results.SelectMany(result => result);
}
Run Code Online (Sandbox Code Playgroud)
这假设并行意味着同时发生.如果您希望从头开始使用多个线程运行这些操作(包括方法的同步部分async),您还需要使用Task.Run将工作卸载到ThreadPool线程:
private async Task<IEnumerable<Employee>> Combine()
{
var results =
await Task.WhenAll(Task.Run(() => SearchEmployeeFromDb()), Task.Run(() => GetEmployeeFromService()));
return results.SelectMany(result => result);
}
Run Code Online (Sandbox Code Playgroud)