当前位置: 首页 > 知识库问答 >
问题:

异步await vs GetAwaiter()。GetResult()和回调

裴理
2023-03-14

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

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

>

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

    使用等待者和回调在这种方法中,用户界面客户端调用服务层并将回调传递给服务层,服务层将对服务器的超文本传输协议调用包装在一个任务中,并使用GetAwaiter()。GetResault(),当超文本传输协议调用完成时,它会调用用户界面客户端传递的回调。在这种情况下,没有方法必须标记async,但不确定GetAwaiter()的使用

    任务运行(异步()=

    我只是想找出哪一个是更好的方法如果有一些问题与任一方法我应该知道

  • 共有1个答案

    司徒翼
    2023-03-14

    您应该一直使用异步等待关键字,或者根本不应该使用异步。

    您的第二个选项并不是真正的异步选项。它调用异步操作并与任务同步阻止它。GetAwaiter()。GetResult().除了非常复杂之外,它不是异步的,可能会导致死锁。

     类似资料:
    • 回调 用户在支付完成后跳转回来的页面,一般只建议做显示用途。 // SDK实例化,传入公共配置 $pay = new \Yurun\PaySDK\AlipayApp\SDK($params); if($pay->verifyCallback($_GET)) { // 回调验证成功,可以通过GET参数来获取支付宝回传的参数 } else { // 回调验证失败 } 详见:test

    • 我正在尝试创建一个回调函数: 首先,我创建了一个函数接口,用于定义回调函数的约定 我创建了一个类,该类将定义一个方法来调用我的回调(我通过使用lambda表达式传递了接口的实现作为对此方法的引用) 下面是我的代码: 但当我运行这段代码时,我得到了这样的结果。 有人能告诉我为什么我会有这个例外吗?

    • 本文向大家介绍承诺回调和异步/等待,包括了承诺回调和异步/等待的使用技巧和注意事项,需要的朋友参考一下 首先,我们必须了解两个主要概念 同步编程 异步编程 同步编程 它等待每个语句完成执行,然后再转到下一条语句。 如果语句不相互依赖,但是由于它们在队列中,它们仍在等待执行,则此方法可能会减慢应用程序的速度。 异步编程 在移动到下一条语句之前,它不等待当前语句完成执行。例如,调用Web服务并使用Ja

    • 问题内容: 如何快速进行异步回调?我正在为我的应用程序编写一个小框架,因为它应该同时在iOS和OS X上运行。因此,我将非特定于设备的主要代码放入该框架中,该框架还处理对我的在线api的请求。很显然,我也希望应用程序的GUI以及ViewController在api请求完成后立即做出反应。在Objective- C中,我通过将包含必须在id变量中调用的函数以及函数本身的视图保存在选择器变量中的视图来

    • 几周前刚开始学Node.js....我不明白为什么“products”数组包含null而不是所需的对象.... 在第13行,当我对对象进行控制台日志记录时,我得到了所需的对象,但我不明白当我在map函数完成它的执行后在第40行对它们进行控制台日志记录时,它们为什么是空的.... 如果数组长度是2(这意味着推入成功),为什么里面存储的对象仍然是空的,而不是我想要存储的对象? 控制台输出 订单模式

    • 异步操作在线程中执行,与主应用程序线程分开。当应用程序调用方法异步执行操作时,应用程序可以在异步方法执行其任务时继续执行。 示例 下面通过一个例子来理解这个概念。在示例程序中使用IO库接受用户输入。 是一种同步方法。它将阻止执行函数调用之后的所有指令,直到方法完成执行。 等待输入。它停止执行并且在收到用户输入之前不再执行任何操作。 以上示例将产生以下输出 - 在计算中,当某个事件在继续之前等待事件