2017-07-18 16 views
-1

Task.RunTask.Startを使用したときの動作に違いがあるのはなぜですか?Task.Runと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 RunAsync 
In Approach1 
In RunAsync 
In Approach2 

注:

In Approach1 
In RunAsync 
In RunAsync 
In Approach2 

を私は次の出力が期待されます。スタート: https://blogs.msdn.microsoft.com/pfxteam/2010/06/13/task-factory-startnew-vs-new-task-start/

+1

「Task.Run()」か「Task.Start()」のどちらを呼び出すかだけではなく、2つの例の違いがあります。その違いがなぜ重要であるかについては、重複しているマークを参照してください短いバージョン:最初の例では、実際の 'RunAsync()'作業を待つメカニズムを提供していないので、 'RunAsync()'が実行される前に、_ "In Approach1" _出力を最初に取得します。 。 –

答えて

0

アプローチ1であなたは待っています。実際に何も待つことはありません。したがって、タスク内に非同期的に実行されている非同期タスクがあります。その後、起動してRunAsyncメソッドを忘れ、非同期メソッドが実行されている間にタスクを終了します。

+1

アプローチ2では、アプローチ1を意味しますか? – pmohandas

+0

ありがとう、編集して修正 –

関連する問題