使用async运行多个方法
本文关键字:方法 运行 async 使用 | 更新日期: 2023-09-27 18:25:34
假设我有这样的代码:
public async void Init(){
init1();
init2();
init3();
}
第一个问题是它们是否异步运行?方法本身是public void
而不是async
。
第二个问题是,我如何确保他们正在运行async
,并知道他们何时完成?像这样。。
public async void Init(){
init1();
init2();
init3();
await ... all finished
}
第三,当我在其他地方调用Init()
时,它可以不被async
方法包装吗?就像下面的代码一样,还是必须是async
?
public async void Init(){
init1();
init2();
init3();
}
public void doIt(){
Init();
}
我有一个async
介绍应该会有所帮助。
第一个问题是它们是否异步运行?
不需要,您实际上不需要在Stack Overflow上问这个问题,因为编译器本身会向您发出警告,明确表示您的方法将同步运行。
第二个问题是,我如何确保它们运行异步,并知道它们何时完成?
首先,您的方法需要适当地异步:
async Task init1Async();
async Task init2Async();
async Task init3Async();
然后,您可以让调用者同时调用,然后异步调用等待它们全部完成:
async Task InitAsync() {
var task1 = init1Async();
var task2 = init2Async();
var task3 = init3Async();
await Task.WhenAll(task1, task2, task3);
}
第三,当我在其他地方调用Init()时,它可以不被异步方法包装吗?
一旦您的InitAsync
方法被正确定义为返回Task
,就可以使用await
:自然消耗它
async Task doItAsync() {
await InitAsync();
}
请注意,此确实要求调用者为async
。
还推荐阅读:我的异步代码最佳实践MSDN文章,特别是关于"避免异步无效"answers"一路异步"的部分。
还有一件事可以做,那就是在方法上等待每个方法,以获得每个方法所需的结果。
var task1 = await init1Async();
var task2 = await init2Async();
var task3 = await init3Async();