同步调用异步方法
假设有一个异步方法,例如GenerateCodeAsync()
,它返回一个任务。要同步调用此方法,需要找到一种方法来协调同步和异步代码。
一种解决方案是在线程池线程中运行异步方法,并使用awaiter
阻塞线程,直到操作完成:
<code class="language-csharp">string code = Task.Run(() => GenerateCodeAsync()).GetAwaiter().GetResult();</code>
直接使用.Result的缺点
直接访问Result
属性可能导致:
Result
的调用阻塞主线程,阻止异步代码执行。AggregateException
中。为了避免这些问题,GetAwaiter().GetResult()
方法:
以上是如何在 C# 中同步调用异步方法而不出现死锁?的详细内容。更多信息请关注PHP中文网其他相关文章!