C++ C++/WinRT:我可以等待来自多个协同路由调用的一个IAsyncation句柄吗?
我有coroutineC++ C++/WinRT:我可以等待来自多个协同路由调用的一个IAsyncation句柄吗?,c++,asynchronous,c++-winrt,C++,Asynchronous,C++ Winrt,我有coroutineiasyncation Foo,它将在我的程序开始时调用一次 我还有一个coroutineiasyncation Bar,它将被任意调用多次,并且在某个时刻必须等待Foo 对Bar的多次调用是否可以像这样等待一次Foo调用? iasyncation m_fooAction=Foo() (稍后,在栏中…) 我尝试了这个,但我一直得到一个错误: 在不允许的情况下分配了代理(请参阅) 请注意: 此开发是针对Windows 8桌面应用程序的,因此不能使用CoreDispatcher
iasyncation Foo
,它将在我的程序开始时调用一次
我还有一个coroutineiasyncation Bar
,它将被任意调用多次,并且在某个时刻必须等待Foo
对Bar
的多次调用是否可以像这样等待一次Foo
调用?
iasyncation m_fooAction=Foo()代码>
(稍后,在栏中
…)
我尝试了这个,但我一直得到一个错误:
在不允许的情况下分配了代理
(请参阅)
请注意:
此开发是针对Windows 8桌面应用程序的,因此不能使用CoreDispatcher
或DispatcherQueue
根据C++/WinRT作者的说法,iSyncation
和类似接口只能有一个等待器
作为替代方案,他们建议使用内核句柄。
更新:
来自雷蒙德·陈(MSFT):
选项3适用于我的案例
co_await m_fooAction;
Possible workarounds:
1. Write your own custom object that supports multi-awaiting.
2. Use an existing object that supports multi-awaiting (such as `Concurrency::task`).
3. Use a kernel handle and `resume_on_signal`.
Option 3 is probably simplest.