最近、C# の新機能である非同期プログラミング用の async/await キーワードについて学ぼうとしています。私がウェブで検索したとき、私はこの例に直面しました:
static void Main(string[] args)
{
Console.WriteLine("Task based APM demo");
// Call Exponnent() asynchronously.
// And immediately return the control flow.
// If I don't put a Task here, the program will sometimes
// terminate immediately.
Task t = new Task(async () =>
{
int result = await Program.Exponent(10);
// After the operation is completed, the control flow will go here.
Console.WriteLine(result);
});
t.Start();
Console.ReadKey();
}
static async Task<int> Exponent(int n)
{
Console.WriteLine("Task started");
return await TaskEx.Run<int>(() => 2 << (n - 1));
}
}
それについて、またこの声明がどのように機能するかについて質問があります。最初に、その時点でプロセスを解放して呼び出し元のコンテキストに戻りたいときに使用される await 式を理解しています。しかし、なぜこの式は Exponent メソッドが呼び出した行でこれを使用したのでしょうか? 実際、コンパイラがこのプログラム行に直面するとどうなるでしょうか? そして、手紙の質問は、なぜプログラムは Exponent メソッドの本体で結果を返すために "TaskEx.Run" を使用するのですか? 「return await (() => 2 << (n - 1));」を使用することは可能ですか? それだけ?コンパイラはこの行でどのように動作しますか?
前もって感謝します