c# - 終了コード - コンソールアプリケーションでTask.WaitAll()から戻り値を取得するにはどうすればよいですか?
vb.net exe 終了コード (2)
私はコンセプトの証明として、非同期戻り値を得るための新たな必要性としてコンソールアプリケーションを使用しています。
私は非同期のmain()メソッドを必要としないようにするために、主なメソッドでTask.WaitAll()
を使う必要があることをTask.WaitAll()
ています。
私は今、ジェネリックスを使うことを可能にするオーバーロードや、キャスト可能なオブジェクトを返すことを可能にするために、Main()の中にいる間に、突っ込んでいます。
あなたはTask.WaitAll
から戻り値を取得しません。 複数のタスクの完了を待ってから、タスク自体から戻り値を取得するためにのみ使用します。
var task1 = GetAsync(1);
var task2 = GetAsync(2);
Task.WaitAll(task1, task2);
var result1 = task1.Result;
var result2 = task2.Result;
Task
が1つしかない場合は、 Result
プロパティを使用してください。 タスクがまだ終了していない場合は、値を返し、呼び出しスレッドをブロックします。
var task = GetAsync(3);
var result = task.Result;
非同期タスク(「同期オーバー非同期」)で同期的に待機(ブロック)するのは一般的には良い考えではありませんが、POCでは問題ありません。
ベストプラクティスのために、新しい非同期の方法を使用してください。 の代わりに
-
Task.WaitAll
をawait Task.WhenAll
-
Task.WaitAny
をawait Task.WhenAny
使用
上記のコードは次のように書くことができます:
var task1 = GetAsync(1);
var task2 = GetAsync(2);
var results = await Task.WhenAll(task1, task2);
var result1 = results[0];
var result2 = results[1];