Task.Run vs Task.Start

时间:2017-07-18 05:07:28

标签: c# async-await

使用Task.Run vs Task.Start时,为什么会发现行为上的差异?

代码段:

async Task<string> RunAsync()
{
    await Task.Delay(2);
    Console.WriteLine("In RunAsync");
    return "{}";
}

void Approach1()
{
    var task = new Task(async () => await RunAsync());

    task.Start();
    task.Wait();

    Console.WriteLine("In Approach1");
}

void Approach2()
{
     var task = Task.Run(() => RunAsync());

     task.Wait();

     Console.WriteLine("In Approach2");
}


void Main()
{
    Approach1();
    Approach2();
}

实际输出:

In Approach1
In RunAsync
In RunAsync
In Approach2

我期待以下输出:

In RunAsync
In Approach1
In RunAsync
In Approach2

请注意,我发现建议不要使用Task.Start的博客: https://blogs.msdn.microsoft.com/pfxteam/2010/06/13/task-factory-startnew-vs-new-task-start/

1 个答案:

答案 0 :(得分:0)

在approach1中你使用await。 await实际上并没有等待任何事情。所以你在Task中有一个异步任务,它是异步运行的。然后它会触发并忘记RunAsync方法,在异步方法仍在运行时结束任务。