任务Task其实是对线程做了一个封装。
- 实例化一个Task,然后用实例化调用Start方法。
- 或者静态调用Run方法。会在线程池上运行指定工作排队。
此外还可以用TaskFactory类实例化执行。
static void ThreadMethod()
{
Console.WriteLine("任务开始");
Thread.Sleep(2000);
Console.WriteLine("任务结束...");
}
static int ThreadMethod2(int a, int b)
{
return a + b;
}
static void Main(string[] args)
{
// 任务其实是对线程做了一个封装。
Task t = new Task(ThreadMethod);
t.Start();
//此外,还可以这样写:
Task.Run(() => ThreadMethod()); // 将在线程池上运行指定工作排队。
// 或者
Task.Run(ThreadMethod);
// 带参也可以。
int res = Task.Run(() => ThreadMethod2(11, 22)).Result;
Console.WriteLine(res);
// 第二种方式:我们使用TaskFactory:任务工厂。
TaskFactory tf = new TaskFactory();
Task t2 = tf.StartNew(ThreadMethod); // 返回一个任务的对象。
Console.WriteLine("main");
Console.ReadKey();
}
- Task.Run()是Task.Factory.StartNew()的简化形式。
- Task.Run()不支持TaskCreationOptions参数
但是:协作执行耗时任务时:使用
Task.Factory.StartNew( () => WritePi(cancellationTokenSource.Token), TaskCreationOptions.LongRunning);
- 建的任务可能长时间运行,使其能恰当地管理它。
- 要少用TaskCreationOptions.LongRunning。