gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:37:06 33 4
gpt4 key购买 nike

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

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

  • 使用 Async await 关键字
    这需要将所有方法标记为 Async 从按钮单击一直到服务层(客户端上的类,用于对服务器进行 http 调用)以及介于两者之间的任何方法。除了在任何地方传播异步的问题之外,这种方法都很好用
  • 使用等待和回调
    在这种方法中,UI 客户端调用服务层并将回调传递给服务层,服务层将向服务器的 http 调用包装在一个任务中并使用 GetAwaiter().GetResult(),当 http 调用完成时它会调用UI 客户端传递的回调。在这种情况下,没有方法必须标记异步,但不确定是否使用 GetAwaiter()

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

  • 我只是想找出哪种方法更好,如果两种方法都存在一些我应该注意的问题

    最佳答案

    您应该使用 asyncawait关键字一直向上,否则您根本不应该使用异步。

    你的第二个选择并不是真正的异步。它正在调用一个异步操作并与 task.GetAwaiter().GetResult() 同步阻塞。 .
    除了非常复杂之外,它不是异步的,可能会导致死锁。

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

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