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

异步方法可以从同步代码异步运行吗

轩辕鸿
2023-03-14

是否可以调用一个异步方法,以便它从一个同步的方法异步运行?我不关心它挂起同步调用程序直到它返回,而是希望该方法被异步调用。

共有1个答案

乌靖
2023-03-14

为了使用户界面窗口显示和操作,它需要创建窗口的线程来处理windows消息。如果没有消息循环旋转,窗口将冻结并拒绝操作。

因此,您的主线程(即应用程序用户界面线程)正在调用接口方法,然后该方法希望显示一个窗口。如果调用方法直到接口方法完成才返回,那么它将冻结,消息循环在方法返回之前无法旋转。

您唯一的解决方案是让接口实现使用一个单独的线程来显示窗口,而其他线程将需要它自己的消息循环来允许窗口操作。

拥有多个用户界面线程并不是很常见,但这是可以做到的。

 类似资料:
  • 我可能还不够清楚--情况是,我的现有代码不支持异步,我希望使用新的库,如System.net.http和只支持异步方法的AWS SDK。因此,我需要弥补这一差距,并能够拥有可以同步调用的代码,然后可以在其他地方调用异步方法。 我读了很多书,有很多次有人问这个问题,也有人回答这个问题。 从非异步方法调用异步方法

  • 我正试图从同步方法运行异步方法。但是我不能等待异步方法,因为我在同步方法中。我一定不理解TPL,因为这是我第一次使用它。 每个方法都需要前一个方法来完成,因为第一个方法的数据用于第二个方法。 Await运算符只能在异步方法中使用。考虑用'async'修饰符标记此方法,并将其返回类型更改为'task' 但是,如果我使用async修饰符,这将是一个异步操作。因此,如果我对的调用没有使用await运算符

  • 异步代码是指当调用后不会立即完成的代码。 setTimeout(() => { console.log('do stuff'); }, 3000 ) 在 setTimeout 执行完3秒后 do stuff 会输出到控制台。我们可以看出当指定的时间过去后我们所提供的异步函数会触发。现在来看个更有启发性的示例: doWork( () => { console.log('call me whe

  • 同步调用异步方法最安全的方法是什么?

  • 问题内容: 在过去的几个小时中,我一直在努力解决这个问题,但无法解决。我想我仍然必须习惯于函数式编程风格;) 我写了一个递归函数,它遍历目录结构并对某些文件进行处理。此功能使用异步IO方法。现在,我要在完成整个遍历后执行一些操作。 如何确保在执行完所有调用但仍使用异步IO功能后执行此操作? 问题答案: 查找“ 步骤”模块。它可以链接异步函数调用,并将结果从一个传递到另一个。