0

我是异步/等待的新手。但我创建了 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两秒钟后,它会写出字符串,然后完成Task.

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

于 2013-01-07T04:12:27.420 回答