C# Task 的用法
其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观。代码更简洁了,使用Task来进行操作。可以跟线程一样可以轻松的对执行的方法进行控制。
顺便提一下,配合CancellationTokenSource类更为可以轻松的对Task操作的代码进行中途终止运行,会在后面的章节中讲述。
如果我们使用线程池来实现某几个方法运行,然后等待运行完成的大概会编写如下代码:
using(ManualResetEvent m1 =newManualResetEvent(false))
using(ManualResetEvent m2 =newManualResetEvent(false))
{
ThreadPool.QueueUserWorkItem(delegate
{
MyMethodA();
m1.Set();
});
ThreadPool.QueueUserWorkItem(delegate
{
MyMethodB();
m2.Set();
});
WaitHandle.WaitAll(newWaitHandle[]{ m1, m2,});
}
如果用Task类的话,相对就比较简单了,至少代码看起来很舒服。也就意味着维护也比较方便
Task t1 =Task.Factory.StartNew(delegate{MyMethodA();});
Task t2 =Task.Factory.StartNew(delegate{MyMethodB();});
t1.Wait();
t2.Wait();
上面的方法是一个一个的执行完毕,获取不是我们想要的,我们一般是想要他们一起同时执行,提高程序处理事情的效率。
Task t1 =Task.Factory.StartNew(delegate{MyMethodA();});
Task t2 =Task.Factory.StartNew(delegate{MyMethodB();});
Task.WaitAll(t1, t2);
下面我们来简单介绍下Task的用法