C# async/await使用举例
生活随笔
收集整理的這篇文章主要介紹了
C# async/await使用举例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、async/await幾點總結
a、被async標記的方法,返回值類型只能為void、Task、Task<T>。
b、被async標記的方法,內部可以有await修飾符,表明內部邏輯某處有異步執行方法。
c、被async標記的方法,內部可以沒有await修飾符,所有邏輯將同步執行。
d、task任務執行創建的線程為后臺線程,主線如果不Task.result獲取結果,主線程結束,異步任務未完成也結束。
f、await關鍵字:方法要被async修飾,才能在方法內部使用await,await后面必須是一個task或返回task的方法,標記了await,就說明后面的操作是一個異步操作。
2、應用實例
1 static void Main(string[] args)
2 {
3 Console.WriteLine("主線程開始");
4 Console.WriteLine("主線程ID:" + Thread.CurrentThread.ManagedThreadId);
5 var task = GetLengthAsync();
6 Console.WriteLine("主線程繼續");
7 var timer = new Stopwatch();
8 timer.Start();
9 Console.WriteLine("task的返回值是" + task.Result);
10 timer.Stop();
11 Console.WriteLine("耗時:" + timer.Elapsed.TotalSeconds + "秒"); //顯示時間
12 Console.WriteLine("主線程ID:" + Thread.CurrentThread.ManagedThreadId);
13 Console.WriteLine("主線程結束");
14 }
15
16 private static async Task<int> GetLengthAsync()
17 {
18 Console.WriteLine("GetLengthAsync()開始");
19 Console.WriteLine("GetLengthAsync()線程ID:" + Thread.CurrentThread.ManagedThreadId);
20 var str = await GetStringAsync();
21 Console.WriteLine("GetLengthAsync()線程ID:" + Thread.CurrentThread.ManagedThreadId);
22 Console.WriteLine("GetLengthAsync()執行完畢");
23 return str.Length;
24
25 }
26
27 private static Task<string> GetStringAsync()
28 {
29 Console.WriteLine("GetStringAsync()開始");
30 Console.WriteLine("GetStringAsync()線程ID:" + Thread.CurrentThread.ManagedThreadId);
31 Console.WriteLine("GetStringAsync()結束");
32 return Task.Run(() =>
33 {
34 Task.Delay(5000);
35 Console.WriteLine("異步任務開始執行");
36 Console.WriteLine("異步任務開始執行線程ID:" + Thread.CurrentThread.ManagedThreadId);
37 Console.WriteLine("異步任務耗時10s:");
38 Thread.Sleep(10000);
39 Console.WriteLine("異步任務執行完畢");
40 return "異步任務執行結果";
41 });
42
43 }
運行結果顯示。
注釋調9行結果顯示。表明,主線程結束,異步任務未完成也結束。
部分內容參考:https://www.cnblogs.com/sheng-jie/p/6471986.html
總結
以上是生活随笔為你收集整理的C# async/await使用举例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VCG(VisualCodeGreppe
- 下一篇: springboot ftp 笔记