任务Task系列之异步编程(async and await)

  异步:异步操作通常用于执行完成时间可能较长的任务,如打开大文件、连接远程计算机或查询数据库=异步操作在主应用程序线程以外的线程中执行。应用程序调用方法异步执行某个操作时,应用程序可在异步方法执行其任务时继续执行。

  异步与多线程的关系:我们已经知道, 异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。简单的说就是:异步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池。

  异步示例:

 1 static void Main(string[] args)
 2         {
 3             Console.WriteLine(SumValue().Result);
 4             Console.ReadLine();
 5         }
 6 
 7         static async Task<Int32> SumValue()
 8         {
 9             Int32 result = 0;
10             var t1 = NumValue(50);
11             var t2 = NumValue(100);
12             result = await t1 + await t2;
13             return result;
14         }
15         static async Task<Int32> NumValue(Int32 n)
16         {
17             Int32 sum = 0;
18             await Task.Run(() => {
19                 for (int i = 0; i < n; i++)
20                 {
21                     sum += i;
22                 }
23             });
24             return sum;
25         }

  运行结果:

  

  注意:

  • 凡是使用await关键字的方法,都必须打上async标记。
  • async表示方法内有异步方法,调用async方法,会立刻另起线程执行。
  • await只是显示等待线程结束。await表示等待异步方法执行完,并取返回值。

猜你喜欢

转载自www.cnblogs.com/mohanchen/p/9403861.html