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.WaitAllawait Task.WhenAll
  • Task.WaitAnyawait 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];




async-await