首页 > 其他 > 详细

async 和 await小结

时间:2017-01-07 15:11:48      阅读:304      评论:0      收藏:0      [点我收藏+]

三大返回值;

  • 返回类型 - Task<TResult> 
  • 返回类型 - Task
  • 返回类型 - void

当你添加 async 关键字后,需要返回一个将用于后续操作的对象,请使用 Task<TResult>。

 

当你如果只是想知道执行的状态,而不需要知道具体的返回结果时,请使用 Task。

当你如果在触发后,你不想管了,请使用 void。如事件处理程序。

ps:这里还有一篇好文章;https://msdn.microsoft.com/zh-cn/magazine/jj991977.aspx

一些异步编程的实践原理;

1.避免 Async Void

当 async Task 或 async Task<T> 方法引发异常时,会捕获该异常并将其置于 Task 对象上。 

对于 async void 方法,没有 Task 对象,因此 async void 方法引发的任何异常都会直接在 SynchronizationContext(在 async void 方法启动时处于活动状态)上引发

private async void ThrowExceptionAsync()
{
  throw new InvalidOperationException();
}
public void AsyncVoidExceptions_CannotBeCaughtByCatch()
{
  try
  {
    ThrowExceptionAsync();
  }
  catch (Exception)
  {
    // The exception is never caught here!
throw;
  }
}

 

 Async void 方法具有不同的组合语义。 返回 Task 或 Task<T> 的 async 方法可以使用 await、Task.WhenAny、Task.WhenAll 等方便地组合而成。

 返回 void 的 async 方法未提供一种简单方式,用于向调用代码通知它们已完成。 启动几个 async void 方法不难,但是确定它们何时结束却不易。 

 Async void 方法会在启动和结束时通知 SynchronizationContext,但是对于常规应用程序代码而言,自定义 SynchronizationContext 是一种复杂的解决方案。

 二:

 

async 和 await小结

原文:http://www.cnblogs.com/mc67/p/6259297.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!