使用async
方法签名以及await
在这些方法中使用表达式有什么其他限制,如果有的话?到目前为止,我知道标记的方法async
只能有以下返回类型之一(可能还有更多?).
void
Task
Task<TResult>
该async
修饰符只允许与返回类型的方法void
,Task
或Task<T>
.一般情况下,它应该只对其中包括使用方法await
操作.
的await
操作者可在任何类型的可用于吨其中(从C#语言规范,7.7.7):
t有一个名为GetAwaiter的可访问实例或扩展方法,没有参数,没有类型参数,以及一个返回类型A,以下所有内容都包含:
- A实现接口System.Runtime.CompilerServices.INotifyCompletion
- A具有bool类型的可访问,可读的实例属性IsCompleted
- A具有可访问的实例方法GetResult,没有参数且没有类型参数
在实践中,这通常意味着你可以使用await
任何Task
,Task<T>
,IAsyncOperation
,IAsyncOperation<T>
(从Windows商店API),以及其他一些选择类型的框架.