C#中的 async void 、 async Task与async Task<TResult>

异步方法可具有以下返回类型

  • Task:如果方法不含任何 return 语句或包含不返回操作数的 return 语句,则将 Task  用作返回类型;
  • Task:如果方法包含指定 TResult 类型操作数的 return 语句,将 Task 指定为返回类型; 
  • void:对于除事件处理程序以外的代码,通常不鼓励使用async void方法,因为调用方不能await那些方法,并且必须实现不同的机制来报告完成或错误条件。
  • 还可以指定任何其他返回类型,前提是返回类型包含GetAwaiter方法
    即​GetAwaiter 方法返回的对象必须实System.Runtime.CompilerServices.ICriticalNotifyCompletion 接口。
    例如,ValueTask类型属于此类实现。可用于System.Thread.Tasks.Entensions的NuGet包方式可用。
  • IAsyncEnumerable(对于返回异步流的异步方法)


 


总结:

主要使用aysnc void返回类型来定义事件处理程序,这些处理程序需要此返回类型。异步事件处理程序通常用作异步程序的起始点。

aysnc void返回异步方法的调用不能等待,并且无法捕获该方法引发的异常。

aysnc void方法依法任何异常都会直接在SynchronizationContext(在async void 方法启动时处于活动状态)上引发

async Task与async Task方法引发异常时,会捕获该异常,并将异常至于Task对象上。

你可能感兴趣的:(.net,c#,开发语言)