スレッドは、一度に1つのことを行うことができます。プロシージャによってスレッドがビジー状態になっても、非同期にすることは意味がありません。
あなたの手順では、スレッドが終了するのを何か他のもののために待機しなければならない期間がある場合しかし、あなたのスレッドではなく、有益な何かをするかもしれません。そのような状況では、非同期待機が有用になります。
Eric lippert once explained async-await with a restaurant metaphor(非同期のawaitのためのページで検索してください)。パンを焼くまで待たなければならない料理人がいれば、この料理は卵を調理するような何かをすることができ、「何か他のもの」が終わったときにトースターに戻ったり、卵が調理されるのを待っている。
ソフトウェアでは、何かが完了するのを待つ以外は、スレッドが通常は何もしません。ディスクを読み書きしたり、ネットワークを介してデータを送受信したりします。通常、非同期バージョンも見つけることができます非同期バージョンのプロシージャとして使用できます。例えば、Stream、TextReader、WebClientなどのクラスを参照してください。
スレッドが多くの計算をしなければならない場合は、スレッドが何もしない瞬間がないので、非同期関数を作成すると便利ではありません。あなたのスレッドは他のことをする時間がありませんので、待ってください。計算が行われている間、あなたのスレッドが有益な何かをすることができれば
しかし、あなたのスレッドは、他の有用なものをやっている間に別のスレッドが、これらの計算を行うせる考えてみます。
private async Task<int> MyLengthyProcedure(...)
{
Task<int> calculationTask = Task.Run(() => DoCalculations(...));
// while one of the threads is doing the calculations,
// your thread could do other useful things:
int i = DoOtherCalculations();
// or if there are calculations that could be performed
// by separate threads simultaneously, start a second task
Task<int> otherCalculationTask = Task.Run(() => DoEvenMoreCalculations(...));
// now two threads are doing calculations. This thread is still free to
// do other things
// after a while you need the result of both calculations:
await Task.WhenAll(new Task[] {calculationTask, otherCalculationTask});
// the int return value of DoCalculations and DoOtherCalculations are in
// the Result property of the task object:
int j = calculationTask.Result;
int k = otherCalculationTask.Result;
return i + j + k;
;
は、多分それはあなたの場合は、より良いあなたを助けるでしょう非同期コードの利点と実装時期について理解していました。次に、実行している操作と使用するライブラリの制限に基づいて、メソッドから非同期または標準の同期メソッドを公開するかどうかを決定することができます。 [asyncとawaitでの非同期プログラミング](https://msdn.microsoft.com/en-us/library/mt674882.aspx) – Igor
@Igorお返事ありがとうございます。私はすでに記事を読んだことがありますが、同期メソッドを呼び出す非同期メソッドを使用している場合は、確かに大雑把にはそれは価値があるのですか?その記事は私の質問 – developer9969