任务执行在哪里?

时间:2016-01-02 07:00:45

标签: c# task-parallel-library task

根据以下代码,我的期望是控制台会发出

  • SayTaskHelloCalled
  • 执行任务
  • SayHelloAfterSleepTask

但是任务没有运行。只有第一行在控制台中发出。请说明原因?

static void Main(string[] args)
    {
        var task2 = SayHelloTask();
        var result = task2.Result;
        Console.WriteLine(result);
    }

 public static Task<string> SayHelloTask()
        {
            Thread.Sleep(2000);
            Console.WriteLine("SayHelloTaskCalled");
            return  new Task<string>(() => {
                Console.WriteLine("Task Executing");
                return "SayHelloAfterSleepTask";
            });

1 个答案:

答案 0 :(得分:6)

使用其中一个构造函数创建一个新的Task,可以支持&#34; Cold Task&#34;。意味着任务尚未开始。由于您从未启动任务,因此您无法看到预期的输出。

您需要致电Task.Start启动它。要返回&#34; Hot Task&#34;(已启动任务),您需要使用Task.Factory.StartNewTask.Run

以下应该工作:

public static Task<string> SayHelloTask()
{
    Thread.Sleep(2000);
    Console.WriteLine("SayHelloTaskCalled");
    return  Task.Run(() => {
        Console.WriteLine("Task Executing");
        return "SayHelloAfterSleepTask";
       });
}

如果你更喜欢你的任务是&#34;冷任务&#34;本身,然后修改你的调用代码如下。

static void Main(string[] args)
{
    var task2 = SayHelloTask();
    task2.Start();//<--Start a "Cold task"
    var result = task2.Result;
    Console.WriteLine(result);
}