Task可以用来并行处理多个任务,使用线程池线程进行异步处理,配合 await async 可以非常好的完成异步任务,使用Task 可以很方便的利用线程池中的线程,比Thread 好用很多。
创建一个Task任务;
1.Run方法调用:
Task t1 = Task.Run(WriteCon);
2.StartNew方法调用:
Task t2 = Task.Factory.StartNew(WriteCon1);
3.Run方法传参调用:
Task t3 = Task.Run(() => WriteCon2("t3"));
4.委托形式任务调用:
Action
5.Run方法带返回值调用:
Task t5 = Task.Run(() => WriteCon3("123"));
在多个任务运行时,因为Task任务不使用await时并不等待调用线程(异步),所以我们可以使用Wait() 方法等待任务完成。
Task t5 = Task.Run(() => WriteCon3("123"));
//等待t5任务执行完毕,然后在通过Result属性获取返回结果,避免死锁及同步等待。
t5.Wait();
string retStr = t5.Result;
也可以使用WaitAll() 等待多个任务执行完毕:
Task.WaitAll(t1, t2, t3);
注意:Wait和WaitAll 会阻塞调用线程,在异步方法中推荐使用 WhenAll 进行异步等待,释放调用线程。
await Task.WhenAll(t1, t2, t3);
完整参考代码:
class TaskDemo
{
public static void TaskDemoMain()
{
//Run方法调用
Task t1 = Task.Run(WriteCon);
//StartNew方法调用
Task t2 = Task.Factory.StartNew(WriteCon1);
//Run方法传参调用
Task t3 = Task.Run(() => WriteCon2("t3"));
//委托形式任务调用
Action
输出结果: