假设我有这段代码:
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
intro这应该有所帮助。
First question is are they running asynchronously or not?
不,你真的不需要在 Stack Overflow 上问这个问题,因为编译器本身会给你一个警告,明确说明你的方法将同步运行。
Second question is how do I make sure they're running async and to know when they're finished?
首先,您的方法需要正确异步:
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);
}
Third, when I call Init() elsewhere, can it not be wrapped by an async method?
一旦您的 InitAsync
方法被正确定义为返回一个 Task
,就可以使用 await
自然地使用它:
async Task doItAsync() {
await InitAsync();
}
请注意,这确实要求调用方是异步
。
同时推荐阅读:我的Best Practices for Asynchronous Code MSDN article ,特别是关于“避免异步无效”和“始终异步”的部分。
关于c# - 使用异步运行多个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26171904/