使用async方法签名以及await在这些方法中使用表达式有什么其他限制,如果有的话?到目前为止,我知道标记的方法async只能有以下返回类型之一(可能还有更多?).
voidTaskTask<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),以及其他一些选择类型的框架.