gpt4 book ai didi

c# - 异步等待与 GetAwaiter().GetResult() 和回调

转载 作者:IT王子 更新时间:2023-10-29 04:49:15 27 4
gpt4 key购买 nike

我正在尝试为我的一个项目寻找最佳实践。它是一个典型的 WPF 应用程序,具有显示项目列表的 UI 和返回结果的数据服务。

我们正在异步调用服务,以免阻塞 UI。我们面前有 2 个选择:

  1. 使用 Async await 关键字这需要将所有方法标记为异步,从单击按钮一直到服务层(客户端上对服务器进行 http 调用的类)以及介于两者之间的任何方法。除了到处传播异步的问题之外,这种方法工作正常

  2. 使用等待器和回调在这种方法中,UI 客户端调用服务层并将回调传递给服务层,服务层将对服务器的 http 调用包装在任务中并使用 GetAwaiter().GetResult(),当 http 调用完成时它调用UI 客户端传递的回调。在这种情况下,没有方法必须标记为异步,但不确定 GetAwaiter() 的使用

    Task.Run(async () =>//等待http调用,调用回调).GetAwaiter().GetResult();

我只是想找出哪种方法更好,以及这两种方法是否存在我应该注意的问题

最佳答案

您应该一直使用 asyncawait 关键字,否则您根本不应该使用 async。

您的第二个选项并不是真正的异步。它正在调用一个异步操作,并使用 task.GetAwaiter().GetResult() 对其进行同步阻塞。除了非常复杂之外,它不是异步的并且可能导致死锁。

关于c# - 异步等待与 GetAwaiter().GetResult() 和回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34549641/

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