没有await和非异步方法调用异步方法的行为是什么?我问,因为我看到Visual Studio在调用异步方法时没有显示任何警告,就好像这是一件非常正常的事情.在这种情况下,异步方法的行为是否同步?
方法具有async修饰符的事实是该方法的实现细节.它只是意味着您可以更轻松地编写异步代码.它根本不会改变方法的调用方式.
通常,异步方法返回Task或Task<T>.它可以返回void,但通常只用于事件处理程序,否则调用者无法判断方法何时完成.在C#7中,它还可以返回自定义任务类型.
现在,调用者如何使用该返回值取决于他们.假设一个方法返回Task<int>-同步方法可能调用那么该方法完全忽略返回的任务("射后不理"),或附加的延续与ContinueWith,或者将它传递给一个异步方法将等待它.这些都不会改变异步方法本身的行为方式.
以这种即发即忘的方式调用异步方法并不罕见(是的,关于不使用/格外小心的通常建议也async void完全适用于这种情况)。
从没有修饰符的方法调用异步方法async不会导致异步方法同步执行。
相反,异步方法将执行到可await等待的第一个实例IsCompleted == false(即第一个等待的实例Task未同步完成)。此时,调用(外部)方法将恢复执行,异步方法的其余部分将安排在稍后运行。
| 归档时间: |
|
| 查看次数: |
3551 次 |
| 最近记录: |