C#中Task任务和Async、Await异步非阻塞方式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#中Task任务和Async、Await异步⾮阻塞⽅式[csharp] view plain copy print?
1. using System;
2. using System.Collections.Generic;
3. using System.Linq;
4. using System.Text;
5. using System.Threading;
6. using System.Threading.Tasks;
7.
8. namespace TaskSample
9. {
10. class Program
11. {
12. static void Main(string[] args)
13. {
14. Console.WriteLine("我是主线程,线程
ID:" + Thread.CurrentThread.ManagedThreadId);
15. //task⽤法⼀
16. Task task1 = new Task(() => MyAction());
17. task1.Start();
18.
19. //task⽤法⼆
20. var strRes = Task.Run<string>(() => { return GetReturnStr(); });
21. Console.WriteLine(strRes.Result);
22.
23. //task->async异步⽅法和await,主线程碰到await时会⽴即返回,继续以⾮阻塞形
式执⾏主线程下⾯的逻辑
24. Console.WriteLine("---------------------------------");
25. Console.WriteLine("①我是主线程,线程ID:
{0}", Thread.CurrentThread.ManagedThreadId);
26. var testResult = TestAsync();
27. Console.ReadKey();
28. }
29.
30. static async Task TestAsync()
31. {
32. Console.WriteLine("②调⽤GetReturnResult()之前,线程ID:{0}。

当前时间:
{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-
dd hh:MM:ss"));
33. var name = GetReturnResult();
34. Console.WriteLine("④调⽤GetReturnResult()之后,线程ID:{0}。

当前时间:
{1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-
dd hh:MM:ss"));
35. Console.WriteLine("⑥得到GetReturnResult()⽅法的结果⼀:{0}。

当前时间:
{1}", await name, DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
36. Console.WriteLine("⑥得到GetReturnResult()⽅法的结果⼆:{0}。

当前时间:
{1}", name.GetAwaiter().GetResult(), DateTime.Now.ToString("yyyy-MM-dd hh:MM:ss"));
37. }
38.
39. static async Task<string> GetReturnResult()
40. {
41. Console.WriteLine("③执⾏Task.Run之前, 线程ID:
{0}", Thread.CurrentThread.ManagedThreadId);
42. return await Task.Run(() =>
43. {
44. Thread.Sleep(2000);
45. Console.WriteLine("⑤GetReturnResult()⽅法⾥⾯线程
ID: {0}", Thread.CurrentThread.ManagedThreadId);
46. return "我是返回值";
47. });
48. }
49.
50. static void MyAction()
51. {
52. Console.WriteLine("我是新进程,线程
ID:" + Thread.CurrentThread.ManagedThreadId);
53. }
54.
55. static string GetReturnStr()
56. {
57. return "我是返回值,线程ID:" + Thread.CurrentThread.ManagedThreadId;
58. }
59. }
60. }。

相关文档
最新文档