为什么我应该等待?

时间:2013-01-07 02:58:58

标签: c# multithreading asynchronous async-await c#-5.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);
    }

是一样的。制作等待方法的重点是什么?只是在其他线程上运行一个函数并等待它完成?

1 个答案:

答案 0 :(得分: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;两秒钟后,它会写出字符串,然后完成Task

对于客户端应用程序,主要好处是响应性(不阻止GUI线程)。对于服务器端应用程序,主要的好处是可伸缩性(您可以获得比线程更多的响应)。