C# 异步多线程实现(四)Task和TaskFactory

任务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。

你可能感兴趣的:(编程语言C#,c#,microsoft,开发语言)