为什么我应该等待?

D J*_*D J 0 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);
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*ary 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);
}
Run Code Online (Sandbox Code Playgroud)

WriteLineFunc将同步阻止正在运行的线程2秒,然后写出字符串.WriteLineFuncAsync将立即Task向其来电者返回不完整的内容; 两秒钟后,它会写出字符串然后完成Task.

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

  • @DJ不,不是.首先,你的方法实际上不会等待.`Task.Delay()`在等待时不会阻塞一个线程,它只返回一个在给定时间后完成的`Task`. (4认同)