我需要使用 InsertData(( 将数据插入我的数据库。正在使用其他服务获取数据。下面的代码正在一个接一个地执行。并行执行此任务的最佳方法是什么。
var taskslist = new List<Task>();
taskslist.Add(this.database.InsertData("data1", await this.service.GetData1()));
taskslist.Add(this.database.InsertData("data2", await this.service.GetData2()));
taskslist.Add(this.database.InsertData("data3", await this.service.GetData3()));
await Task.WhenAll(taskslist);
您可以使用另一种async
方法包装对await
的调用:
async Task GetAndInsert(string key, Func<Task<IList<model>>> getFunc)
=> await database.InsertData(key, await getFunc());
然后可以同时运行每个:
var taskslist = new List<Task>();
taskslist.Add(GetAndInsert("data1", service.GetData1));
taskslist.Add(GetAndInsert("data2", service.GetData2));
taskslist.Add(GetAndInsert("data3", service.GetData3));
await Task.WhenAll(taskslist);
如果在它们完成后不需要使用这些Tasks
,您甚至可以将它们直接传递给Task.WhenAll
而不是创建列表:
await Task.WhenAll(
GetAndInsert("data1", service.GetData1),
GetAndInsert("data2", service.GetData2),
GetAndInsert("data3", service.GetData3));