异步任务<bool>方法调用if条件

lif*_*ode 7 .net c# asynchronous if-statement async-await

我想知道以下代码是否会在执行主线程之前等待异步方法完成,或者只是在条件时继续主线程并将方法返回为false.

public async Task<bool> SomeMethod
{
    if(await AsyncMethod(param))
    {
        //Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

...

异步方法定义为:

public async Task<bool> AsyncMethod(SomeClass param)
{
   //Do something
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 7

我想知道以下代码是否会在执行主线程之前等待异步方法完成,或者只是在条件时继续主线程并将方法返回为false.

都不是.

await是一个"异步等待".换句话说,该方法将等待,但线程不会.

当你的方法遇到它时await(假设它实际上有一些等待做),它会立即将一个不完整的任务返回给调用者SomeMethod.线程继续做它想做的事情.稍后,当等待的任务完成时,SomeMethod将继续执行.当SomeMethod完成时,它前面返回的任务将完成.

我在关于这个主题的博客文章中详细介绍.


Dav*_*vid 6

它将等待操作完成。

请注意您如何调用该操作:

if(await AsyncMethod(param))
Run Code Online (Sandbox Code Playgroud)

两件事情:

  1. 不出所料,使用await关键字将等待操作完成。
  2. 如果它没有等待操作完成,那么这将是一个编译器错误。因为 while abool可以用在条件句中,而 aTask<bool>则不能。