- 总结:符合异步方法语法的情况下,
await 访问异步方法后面的代码行,一定是子线程,
Task 接受 访问异步方法后面的代码行 ,不Result 不会阻止主线,后面一定时主线程,
如果Result,需要阻止当前线程, - 使用 async task 尝试 ,
异步方法本身不会节省 请求时间,但可以减轻主线程压力;
异步方法内默认不会开启新线程(语法可通过),除非手动开启;通常手写异步方法需要task.run 开启新新增,
语法才能保证正确。需要特别注意的是,在task.run之前为主线程,之后,线程会变为子线程,包括 awiat第一次await 后 catch finally 中 如图:
如果 异步方法中,没有await的调用,不会开启新的线程,符合语法的await 可以开启新线程,包括Task.Dealy(n)
如果 不用await 调用异步方法,调用异步方法 的前后代码都是主线程。
注意: 在 await 后(通常有task.run),后面开启新线程,所有
await Task.Delay(5000);//阻塞子线程
Thread.Sleep(5000);//阻塞子线程, - Task 方法
方法声明为Task 的 ,方法中不能有 不允许await,
Task 方法中有 开启了子线程, 被新线程体内和被调处await 之后的都为子线程,说明了阻塞,但新起线程之后则为 主线程,未被阻塞
如图:
代码中如果去掉 await ,值打印1个子线程 ,也不阻塞主线程 如图
Task 接受TaskAsync 异步方法,Result之前,不会阻止主线程,等所有子线程完成,主线程顺序完成后才执行Result后代码
Task 接受TaskAsync 异步方法,不会阻止主线程,
C# Task 及 async Task
最新推荐文章于 2024-02-29 10:54:02 发布