我是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);
}
是一样的。制作等待方法的重点是什么?只是在其他线程上运行一个函数并等待它完成?
答案 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线程)。对于服务器端应用程序,主要的好处是可伸缩性(您可以获得比线程更多的响应)。