异步方法可具有以下返回类型:
- Task:如果方法不含任何 return 语句或包含不返回操作数的 return 语句,则将 Task 用作返回类型;
- Task<TResult>:如果方法包含指定 TResult 类型操作数的 return 语句,将 Task<TResult> 指定为返回类型;
- void:对于除事件处理程序以外的代码,通常不鼓励使用async void方法,因为调用方不能await那些方法,并且必须实现不同的机制来报告完成或错误条件。
- 还可以指定任何其他返回类型,前提是返回类型包含GetAwaiter方法。
即GetAwaiter 方法返回的对象必须实System.Runtime.CompilerServices.ICriticalNotifyCompletion 接口。
例如,ValueTask<TResult>类型属于此类实现。可用于System.Thread.Tasks.Entensions的NuGet包方式可用。 - IAsyncEnumerable<T>(对于返回异步流的异步方法)
总结:
主要使用aysnc void返回类型来定义事件处理程序,这些处理程序需要此返回类型。异步事件处理程序通常用作异步程序的起始点。
aysnc void返回异步方法的调用不能等待,并且无法捕获该方法引发的异常。
aysnc void方法依法任何异常都会直接在SynchronizationContext(在async void 方法启动时处于活动状态)上引发
async Task与async Task<TResult>方法引发异常时,会捕获该异常,并将异常至于Task对象上。
本文介绍了异步方法的返回类型,如asyncTask和asyncTask<TResult>的区别,强调了asyncvoid在事件处理中的应用以及其调用限制。同时讨论了如何处理async方法中抛出的异常,包括在SynchronizationContext中的行为。
3950

被折叠的 条评论
为什么被折叠?



