我想澄清一下使用 Await 和 Async 的额外好处是什么。
如果我的应用程序正在调用 await Func1()
(因此不会阻塞此处的 UI)。 Func1
正在调用 await Func2()
,但是 Func2()
的结果对于 Func1
的完成很重要这是工作,那么为什么我需要让 Func2()
可等待。 Func1()
执行将花费同样长的时间,因为它正在等待 Func2
完成。 await 在这里所做的就是增加 StateMachine 开销。
我是不是漏掉了什么?
最佳答案
更好的口号是async
all the way up。因为您从异步操作开始并使其调用者异步,然后是下一个调用者等。
当您有一个固有的异步操作(通常是 I/O 但不一定)并且您不想浪费线程等待操作完成时,您应该使用 async-await
。选择 async
操作而不是同步操作不会加快操作速度。这将花费相同的时间(甚至更多)。它只是使该线程能够继续执行一些其他 CPU 密集型工作,而不是浪费资源。
但是为了能够await
那个操作方法需要是一个async
并且调用者需要await
它等等等等。
因此 async
一路向上使您能够实际进行异步调用并释放任何线程。如果它不是一直async
,那么某些线程被阻塞了。
所以,这个:
async Task FooAsync()
{
await Func1();
// do other stuff
}
async Task Func1()
{
await Func2();
// do other stuff
}
async Task Func2()
{
await tcpClient.SendAsync();
// do other stuff
}
比这更好:
void Foo()
{
Func1();
// do other stuff
}
void Func1()
{
Func2().Wait(); // Synchronously blocking a thread.
// do other stuff
}
async Task Func2()
{
await tcpClient.SendAsync();
// do other stuff
}
关于c# - 为什么一路往下用Async/await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29808915/