以下のプログラムが行うのと同じことを、余分なスレッドや await
andasync
キーワードを使用せずに、タスクのみを使用して達成する方法を知りたいです。サンプルコードは素晴らしいでしょう。IO バウンド操作または長時間実行操作のバージョンTaskCompletionSource
を使用する必要があるように思えます。Async
static void Main(string[] args)
{
Task t = Go();
Console.WriteLine("Hello World");
Task.Delay(1000).GetAwaiter().OnCompleted(() => { Console.WriteLine("Completed"); });
Console.ReadLine();
}
static async Task Go()
{
var task = PrintAnswerToLife();
await task;
Console.WriteLine("Done");
}
static async Task PrintAnswerToLife()
{
var task = GetAnswerToLife();
int answer = await task;
Console.WriteLine(answer);
}
static async Task<int> GetAnswerToLife()
{
var task = Task.Delay(2000);
await task;
int answer = 21 * 2;
return answer;
}