【发布时间】:2019-10-05 19:03:32
【问题描述】:
Windows 运行时大量使用异步模式,将长时间运行的任务卸载到线程池。我已经阅读了Threading and async programming 中的所有文章,但找不到我的问题的答案:
是否所有 Windows 运行时异步调用都保证在某个时候返回?
【问题讨论】:
-
任何同步调用都保证在某个时候返回!
标签: windows-runtime winrt-async c++-winrt
Windows 运行时大量使用异步模式,将长时间运行的任务卸载到线程池。我已经阅读了Threading and async programming 中的所有文章,但找不到我的问题的答案:
是否所有 Windows 运行时异步调用都保证在某个时候返回?
【问题讨论】:
标签: windows-runtime winrt-async c++-winrt
正如@Paulo 在 cmets 中提到的,这完全取决于代码的编写方式。编写自己的永不返回的异步代码很容易,并且通过从 UI 线程执行 .Wait() 来使用平台 API 使应用程序死锁很简单。
从根本上说,异步操作是一个函数,它返回一个对象(通常称为“承诺”或“未来”),然后该对象要么设置一个事件,要么在未来某个时间点调用回调函数(这是异步操作的“逻辑”返回值)。
其中任何一部分都可能失败——初始函数可能永远无法返回 Promise 对象,或者 Promise 可能永远无法调用回调/设置事件。
【讨论】: