0

私はasync/awaitを初めて使用します。しかし、POCを作成しましたが、それでも混乱しています。

メソッドの結果

public async void WriteLineFunc(string str)
    {
        await Task.Factory.StartNew(() => WaitFor2Secs());
        //WaitFor2Secs();
        Console.WriteLine(str);
    }

public async void WriteLineFunc(string str)
    {
        //await Task.Factory.StartNew(() => WaitFor2Secs());
        WaitFor2Secs();
        Console.WriteLine(str);
    }

と同じ。待機中のメソッドを作成するポイントは何ですか?他のスレッドで関数を実行し、その完了を待つだけですか?

4

1 に答える 1

7

メソッドが を使用する場合、await完了する前に呼び出し元に戻ることができます。

次の例を検討してください。

public async Task WriteLineFuncAsync(string str)
{
  await Task.Delay(2000);
  Console.WriteLine(str);
}

public void WriteLineFunc(string str)
{
  Thread.Sleep(2000);
  Console.WriteLine(str);
}

WriteLineFunc実行中のスレッドを 2 秒間同期的にブロックしてから、文字列を書き出します。WriteLineFuncAsyncすぐに不完全Taskを呼び出し元に返します。2 秒後、文字列が書き出され、Task.

クライアント側アプリケーションの場合、主な利点は応答性です(GUI スレッドはブロックされません)。サーバー側アプリケーションの場合、主な利点はスケーラビリティです (スレッドよりもはるかに多くの応答を持つことができます)。

于 2013-01-07T04:12:27.420 に答える