c#的async和await
2020-04-02 08:03
871 查看
async和await一般成对出现
async出现在方法名里面
而await在里面,await要放在Task前面
单独用没用的
private static async Task 线程() { Console.WriteLine("线程启动"); TaskFactory tf = new TaskFactory(); Task task = tf.StartNew(() => { Console.WriteLine($"这是线程{Thread.CurrentThread.ManagedThreadId},启动"); }); await task; //await相当于把后面的都用ContinueWith包起来 //task.ContinueWith(t => //{ // Console.WriteLine(); //}); Console.WriteLine($"这是最后执行的线程,但是是主线执行,还是分线程执行,不确定,此时是{Thread.CurrentThread.ManagedThreadId}"); }
这其实就是一种封装的语法糖
把先执行的和后执行的用await分开
而await就相当于把后面的代码包住,相当于ContinueWith,而且访问到,就回调到主线程执行,而最后再执行后面的,但是await后面的是主线程还是分线程执行是不确定的
这边做个例子
private static async Task 主线程() { Console.WriteLine($"主线程1"); 子线程(); Console.WriteLine($"主线程2"); } private static async Task 子线程() { Console.WriteLine($"子线程1"); await Task.Run(() => { Thread.Sleep(200); Console.WriteLine($"子线程2"); }); Console.WriteLine($"子线程3"); }
此时是先出现主线程1,然后进入子线程,返回子线程1,然后碰见await,回调到主线程,然后主线程跑主线程的,子线程跑子线程的,主线程返回主线程2,主线程返回子线程2,3
然后如果有返回值,只需要在方法名的Task后面加上返回的值,然后调用只需要用Result即可
private static async Task<int> 线程()//返回int int a=线程.Result
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- C#async await Task使用例子
- [C#] .NET4.0中使用4.5中的 async/await 功能实现异
- 使用Async和Await进行异步编程(C#版 适用于VS2015)
- 说说C#的async和await 解决卡顿问题 转
- C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!
- C# Async与Await的使用
- 探索c#之Async、Await剖析
- C#里的async和await
- C# 异步操作 async await
- C# 中的Async 和 Await 的用法详解
- 说说C#的async和await的具体用法
- C#异步中的Task,async,await
- [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
- 请教 C# 异步 async await 问题
- [C#] 走进异步编程的世界 - 开始接触 async/await
- 【TypeScript】如何在TypeScript中使用async/await,让你的代码更像C#。
- [转]说说C#的async和await
- c# await和async入门
- [C#]async和await刨根问底
- C#~异步编程再续~await与async引起的w3wp.exe崩溃