async、await正确姿势
摘要async、await是在C# 5.0之后引入的一种简化异步操作的方式。使用它们之后,可以使我们的编写异步操作更加方便快捷,维护以及阅读起来更方便。 一个例子async、await虽然简化了我们编写异步方法。但也很容易让人产生误解。首先看一个例子: Task<> AddAsync( x, Task.Factory.StartNew(() => { x +
这种加了async、await叫不叫异步呢?答案肯定不是的。我们可以这样叫这种方法:加了async、await标记的同步方法。 再看下面的一个例子 原文:?? . (See "Return Types" section.)
because the return statement returns an integer.
Task<>
HttpClient client =
</span><span style="color: #008000;">//</span><span style="color: #008000;"> GetStringAsync returns a Task<string>. That means that when you await the
</span><span style="color: #008000;">//</span><span style="color: #008000;"> task you'll get a string (urlContents). </span>
Task<<span style="color: #0000ff;">string</span>> getStringTask = client.GetStringAsync(<span style="color: #800000;">"</span><span style="color: #800000;">http://msdn.microsoft.com</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;"> You can do work here that doesn't rely on the string from GetStringAsync. </span>
<span style="color: #000000;"> DoIndependentWork();
} 上面的方法GetStringAsync,如果不需要返回值,可以移步进行执行,然后会执行方法DoIndependentWork方法,知道await??getStringTask拿到GetStringAsync方法的返回值。 以下特征总结了使上一个示例成为异步方法的原因。
在异步方法中,可使用提供的关键字和类型来指示需要完成的操作,且编译器会完成其余操作,其中包括持续跟踪控件以挂起方法返回等待点时发生的情况。 一些常规流程(例如,循环和异常处理)在传统异步代码中处理起来可能很困难。 在异步方法中,元素的编写频率与同步解决方案相同且此问题得到解决。 上面的方法执行过程 关系图中的数值对应于以下步骤。
?总结简单一句话,并不是所有的加了async和await关键字的方法就是异步方法。可以这样理解 await 的位置决定了到底是不是异步方法,如果直接await xxxAsync那么是挂起当前方法直到拿到返回值才会执行下面的逻辑,这样就是一种同步方法了。异步是类似这样的 代码块: task t=
<span style="color: #0000ff;">await <span style="color: #000000;"> t; <span style="color: #008000;">//<span style="color: #008000;">结束参考文章 ?这篇文章对async、await介绍的非常详细,不懂的可以参考这个。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |