多线程(5)async&await_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 多线程(5)async&await

多线程(5)async&await

 2017/6/24 5:30:55  永远的麦子  程序员俱乐部  我要评论(0)
  • 摘要:.net4.0的Task已经让我们可以非常简单地使用多线程,并且可以有返回值,也可以支持线程的取消等操作,可谓已经很强大了。但.net4.5为我们带来了async&await,使得实现多线程的写法更简单,更优美,更符合线性思维。下面通过一个例子来演示通过Task和async&await分别如何实现,并且最后还附上代码执行顺序图。使用Task实现如下代码:1#region使用Task实现2staticvoidTestByTask()3{4Console.WriteLine
  • 标签:多线程 线程

  .net 4.0的Task已经让我们可以非常简单地使用多线程,并且可以有返回值,也可以支持线程的取消等操作,可谓已经很强大了。但.net 4.5为我们带来了async&await,使得实现多线程的写法更简单,更优美,更符合线性思维。

下面通过一个例子来演示通过Task和async&await分别如何实现,并且最后还附上代码执行顺序图。

使用Task实现

如下代码:

 1 #region 使用Task实现
 2 static void TestByTask()
 3 {
 4     Console.WriteLine("main thread start,current thread id:" + Thread.CurrentThread.ManagedThreadId);
 5     var task = Task.Factory.StartNew<string>(() =>
 6     {
 7         return GetNameByTask();
 8     });
 9     Console.WriteLine("get another thread result,result:" + task.Result);
10     Console.WriteLine("main thread completed!");
11 }
12 
13 static string GetNameByTask()
14 {
15     Console.WriteLine("another thread start,current thread id:" + Thread.CurrentThread.ManagedThreadId);
16     return "mcgrady";
17 } 
18 #endregion

 

输出结果:

 

使用async&await实现

 假如使用async&await如何实现呢,如下代码:

 1 #region 使用async&await实现
 2 static async void TestByAsyncAwait()
 3 {
 4     Console.WriteLine("main thread start,current thread id:" + Thread.CurrentThread.ManagedThreadId);
 5     var name = GetNameByAsyncAwait();
 6 
 7     Console.WriteLine(string.Format("get another thread result,result:{0}", await name));
 8     Console.WriteLine("main thread completed!");
 9 }
10 
11 static async Task<string> GetNameByAsyncAwait()
12 {
13     return await Task.Factory.StartNew<string>(() =>
14     {
15         Console.WriteLine("another thread start,current thread id:" + Thread.CurrentThread.ManagedThreadId);
16         return "mcgrady";
17     });
18 } 
19 #endregion

 

输出结果:

输出结果跟使用Task相同。

 

代码执行流程如下图:

 

完整代码:

class="code_img_closed" src="/Upload/Images/2017062405/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('db1b4c0c-9cf5-4cda-9f30-a81deb85f0e1',event)" src="/Upload/Images/2017062405/2B1B950FA3DF188F.gif" alt="" />
 1 namespace ConsoleApplication25
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             //1,使用task实现
 8             //TestByTask();
 9 
10             //2,使用async&await实现
11             TestByAsyncAwait();
12 
13             Console.ReadKey();
14         }
15 
16         #region 使用Task实现
17         static void TestByTask()
18         {
19             Console.WriteLine("main thread start,current thread id:" + Thread.CurrentThread.ManagedThreadId);
20             var task = Task.Factory.StartNew<string>(() =>
21             {
22                 return GetNameByTask();
23             });
24             Console.WriteLine("get another thread result,result:" + task.Result);
25             Console.WriteLine("main thread completed!");
26         }
27 
28         static string GetNameByTask()
29         {
30             Console.WriteLine("another thread start,current thread id:" + Thread.CurrentThread.ManagedThreadId);
31             return "mcgrady";
32         } 
33         #endregion
34 
35         #region 使用async&await实现
36         static async void TestByAsyncAwait()
37         {
38             Console.WriteLine("main thread start,current thread id:" + Thread.CurrentThread.ManagedThreadId);
39             var name = GetNameByAsyncAwait();
40 
41             Console.WriteLine(string.Format("get another thread result,result:{0}", await name));
42             Console.WriteLine("main thread completed!");
43         }
44 
45         static async Task<string> GetNameByAsyncAwait()
46         {
47             return await Task.Factory.StartNew<string>(() =>
48             {
49                 Console.WriteLine("another thread start,current thread id:" + Thread.CurrentThread.ManagedThreadId);
50                 return "mcgrady";
51             });
52         } 
53         #endregion
54     }
55 }
View Code

 

上一篇: ASP.NET系统对象 下一篇: static关键字
发表评论
用户名: 匿名