27

await を使用するこれら 2 つの形式の間に機能上の違いはありますか?

  1. string x = await Task.Factory.StartNew(() => GetAnimal("feline"));
    
  2. Task<string> myTask = new Task<string>(() => GetAnimal("feline"));
    myTask.Start();
    string z = await myTask;
    

具体的には、各操作はどのような順序で 1. で呼び出されますか? StartNew が呼び出されてから await が呼び出されますか、それとも 1. で最初に await が呼び出されますか?

4

2 に答える 2

33

asyncとを使用してコードを記述している場合は、可能な限りawaitを使用する必要があります。Task.Run

Taskコンストラクター (およびTask.Start) は、まだ開始されていないタスクを作成するために使用される Task Parallel Library からの継承です。Taskコンストラクターであり、コードTask.Startでは使用しないでください。async

同様に、タスクTaskFactory.StartNewに最適なデフォルトを使用せず、ラムダを理解しない古い方法です。いくつかの状況で役立ちますが、ほとんどの場合、コードの方が適しています。asyncasyncTask.Runasync

于 2013-06-08T16:40:30.400 に答える
18

StartNew、タスクを作成して開始するための省略形です。インスタンスを開始する前に何かをしたい場合はTask、コンストラクターを使用します。タスクを作成してすぐに開始したいだけの場合は、短縮形を使用してください。

のドキュメントは次のようにStartNew述べています。

StartNew を呼び出すことは、コンストラクターの 1 つを使用してタスクを作成し、Task.Start メソッドを呼び出してタスクの実行をスケジュールすることと機能的に同等です。

于 2013-06-08T16:21:43.197 に答える