gpt4 book ai didi

c# - .Wait() 和 .GetAwaiter().GetResult() 有什么区别?

转载 作者:IT王子 更新时间:2023-10-29 03:44:09 24 4
gpt4 key购买 nike

我的方法返回 Task。我想等到它完成。我应该用什么.Wait() 还是 .GetAwaiter().GetResult()?它们有什么区别?

最佳答案

两者都是同步等待操作结果(您应该尽可能避免这些)。

区别主要在于处理异常。使用 Wait 时,异常堆栈跟踪不会改变并代表异常发生时的实际堆栈,因此如果您有一段代码在线程池线程上运行,您将拥有像这样堆叠

ThreadPoolThread.RunTask
YourCode.SomeWork

另一方面,.GetAwaiter().GetResult() 将重新处理堆栈跟踪以考虑所有异步上下文,忽略部分代码在 UI 线程上执行,有些在 ThreadPool 线程上,有些只是异步 I/O。因此,您的堆栈跟踪将反射(reflect)通过您的代码 的类似同步的步骤:

TheSyncMethodThatWaitsForTheAsyncMethod
YourCode.SomeAsyncMethod
SomeAsync
YourCode.SomeWork

至少可以说,这往往会使异常堆栈跟踪更有用。您可以看到 YourCode.SomeWork 在您的应用程序上下文中被调用的位置,而不是“它运行的物理方式”。

有关其工作原理的示例在 reference source 中。 (当然是非契约(Contract)性的)。

关于c# - .Wait() 和 .GetAwaiter().GetResult() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36426937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com