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小时内删除。
发表评论