3 回答
TA贡献1802条经验 获得超5个赞
通常这就是等待所有任务异步完成的方式:
await Task.WhenAll(myArrayOfTasks);
要在内部等待,Task.Run
只需传递异步委托(一些读取):
Task.Run(async () => { await Task.Delay(1000); });
另外,了解为什么在实践中要避免Task.Run
:Task.Run Etiquette 和正确用法以及更多示例也会很有帮助。简而言之,您不应该用 包装阻塞 APITask.Run
,这是没有意义的,因为底层线程无论如何都会被阻塞。对于非阻塞 API 来说,一个好的设计是 return Task
,因此您无论如何都不需要运行新的 API。
TA贡献1995条经验 获得超2个赞
你需要这样做:
static async Task Main(string[] args)
{
var tasks = new[]
{
Task.Run(() =>
{
// Need to be awaited
var writer = WritingDatabase();
}),
Task.Run(() =>
{
// Need to be awaited as well
var reader = ReadingDatabase();
})
};
await Task.WhenAll(tasks);
}
TA贡献2051条经验 获得超10个赞
由于您已经拥有Task返回 API,因此您可以执行以下操作:
static async Task Main(string[]args)
{
await Task.WhenAll(WritingDatabase, ReadingDatabase);
}
- 3 回答
- 0 关注
- 112 浏览
添加回答
举报