在同一方法中使用多个等待的效果?

Iva*_*ono 5 c# asynchronous async-await

我有以下方法提交更改数据库(使用实体框架):

public async Task<int> CommitAsync(Info info)
{
    if (this.Database.Connection.State == ConnectionState.Closed)
        await this.Database.Connection.OpenAsync();

    await SetInfo(info);
    return await base.SaveChangesAsync();
}
Run Code Online (Sandbox Code Playgroud)

以上方法是否可以安全使用,或者我应该:

  1. 避免使用async-await,或
  2. 使用 ContinueWith

Jon*_*eet 13

await在同一个异步方法中使用多个表达式绝对没问题- 否则它将是相对无用的功能.

基本上,该方法将同步执行,直到它到达await尚未完成的等待所涉及的第一个方法.然后它将返回给调用者,为等待执行剩余的异步方法设置了延续.如果执行后到达另一个await地方的awaitable尚未完成表达,延续设置在 awaitable等.

每次方法从await"恢复"时,它都会继续使用相同的局部变量等.它通过编译器代表您构建状态机来实现.