C#asyncawait使⽤举例
1、async/await⼏点总结
  a、被async标记的⽅法,返回值类型只能为void、Task、Task<T>。
  b、被async标记的⽅法,内部可以有await修饰符,表明内部逻辑某处有异步执⾏⽅法。
  c、被async标记的⽅法,内部可以没有await修饰符,所有逻辑将同步执⾏。
  d、task任务执⾏创建的线程为后台线程,主线如果不sult获取结果,主线程结束,异步任务未完成也结束。
  f、await关键字:⽅法要被async修饰,才能在⽅法内部使⽤await,await后⾯必须是⼀个task或返回task的⽅法,标记了await,就说明后⾯的操作是⼀个异步操作。
2、应⽤实例
1static void Main(string[] args)
2        {
3            Console.WriteLine("主线程开始");
4            Console.WriteLine("主线程ID:" + Thread.CurrentThread.ManagedThreadId);
5var task = GetLengthAsync();
6            Console.WriteLine("主线程继续");
7var 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
16private static async Task<int> GetLengthAsync()
await和async使用方法17        {
18            Console.WriteLine("GetLengthAsync()开始");
19            Console.WriteLine("GetLengthAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
20var str = await GetStringAsync();
21            Console.WriteLine("GetLengthAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
22            Console.WriteLine("GetLengthAsync()执⾏完毕");
23return str.Length;
24
25        }
26
27private static Task<string> GetStringAsync()
28        {
29            Console.WriteLine("GetStringAsync()开始");
30            Console.WriteLine("GetStringAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
31            Console.WriteLine("GetStringAsync()结束");
32return 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("异步任务执⾏完毕");
40return"异步任务执⾏结果";
41            });
42
43        }
运⾏结果显⽰。
注释调9⾏结果显⽰。表明,主线程结束,异步任务未完成也结束。
部分内容参考:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。