在过去的几年里,async/await在C#世界中得到了很大的普及。异步函数也倾向于在应用程序中迅速扩展:需要等待awaitable,因此调用函数必须是异步的,因此也是一个可等待的函数,.以此类推。
我在C++/Cli项目中使用C#库。库公开异步API。VisualC++编译器不支持async/await。因此,我无法等待库给我的任何API。
我有以下选择:
Wait()或访问异步函数返回的Task/Task<T>对象的Result属性: UI线程的Causes the infamous dead-lock。有什么办法让这件事成功吗?如果有必要,我不会介意同步执行异步API。
发布于 2019-07-27 21:11:18
在我看来,你的问题更像是一个更大问题的征兆。我个人尽量避免将业务逻辑放在C++-CLI模块中。具体来说,我试图将ref class功能限制在三个主要方面:
Task的方法。我可能错了,但在您的情况下,您的C++代码似乎没有很好地解耦,您最终会在C++-CLI模块中连接它的不同部分。
至于您的问题,我将使用Task.ContinueWith系列的方法来执行异步延续,而不是async / await。但是,如果希望在特定的SynchronizationContext (如UI线程)上调用延续,则必须特别注意提供正确的TaskScheduler。
https://stackoverflow.com/questions/42274911
复制相似问题