2

次のプログラムがあります。

static void Main(string[] args) { RunTest(); }

    private static void RunTest() {
        DoIOWorkFiveTimesAsync().Wait();
    }

    private static async Task DoIOWorkFiveTimesAsync() {
        for (int i = 0; i < 5; ++i) {
            Console.WriteLine("Before: " + i);
            await DoIOWorkAsync();
            Console.WriteLine("After: " + i);
        }
    }

    private static Task DoIOWorkAsync() {
        Console.WriteLine("Doing work...");
        return new Task(() => Thread.Sleep(1500));
    }

私は見ることを期待します:

  Before: 1
  Doing work...
  After: 1
  Before: 2
  Doing work...
  After: 2
  Before: 3
  Doing work...
  After: 3
  Before: 4
  Doing work...
  After: 4
  Before: 5
  Doing work...
  After: 5

しかし、代わりに、次のようになります。

Before: 1
Doing work...

そして、それ以上進むことはありません。私は C#5 の async/await 機能を理解しようと試みましたが、常に効果がありませんでした。繰り返しますが、説明は私を避けます。

4

2 に答える 2

3

簡単です。あなたは を返しましたTaskが、それを開始しませんでした。

次のようにコードを変更した場合:

private static Task DoIOWorkAsync()
{
    Console.WriteLine("Doing work...");
    Task work = new Task(() => Thread.Sleep(1500));
    work.Start();
    return work;
}

期待どおりに動作します。

于 2013-08-26T17:37:26.933 に答える