Task与Thread的区别
Thread每次运行会创建一个新的线程,线程的创建、结束带来大量的开销。
Task每次运行时,会去线程池中寻找空闲的线程,将其分配使用。
Task及awit/async
async/await 结构可分成三部分:
(1)调用方法:该方法调用异步方法,然后在异步方法执行其任务的时候继续执行;
(2)异步方法:该方法异步执行工作,然后立刻返回到调用方法;
(3)await 表达式:用于异步方法内部,指出需要异步执行的任务。一个异步方法可以包含多个 await 表达式(不存在 await 表达式的话 IDE 会发出警告)。
如何看异步代码?
async定义的函数可分为以下几部分: await之前的部分;await部分;await之后的部分。
当主函数运行到async函数时,先运行await之前的部分,遇到await后,线程分为两部分,(此时主线程从async函数中已经返回了)一个线程在主函数中继续运行,另一线程在继续运行await函数。PS:async函数内部的执行顺序,还是不变的,严格从上往下执行,即使有多个awit关键词,仍旧执行完前一个await语句后,再执行后一个await语句。
示例代码与输出
1 | class Program |
运行结果如下所示:1
2
3
4
5
6
7main thread start!
Task start!
await0 start!
main thread end!
await0 end!
awit1 start!
awit1 end!