async
/ await
在C#世界中获得了很多人气。异步函数也倾向于在应用程序中快速传播:需要等待等待,因此调用函数必须是异步的,因此也是等待的,等等......等等。
我在C ++ / Cli项目中使用C#库。该库公开了异步API。 Visual C ++编译器不支持async
/ await
。因此,我无法等待图书馆给我的任何API。
我有以下选择:
Wait()
或访问Result
/ Task
对象的Task<T>
属性,异步函数返回:UI线程的Causes the infamous dead-lock。有没有办法让这项工作?如果必须的话,我不介意同步执行异步API。
答案 0 :(得分:0)
在我看来,您的问题更多是更大问题的征兆。我个人尽量避免将业务逻辑放入C ++-CLI模块中。具体来说,我尝试将ref class
功能限制在3个主要领域:
Task
的方法。我可能是错的,但是在您的情况下,听起来您的C ++代码没有很好地解耦,最终您将其不同部分连接到了C ++-CLI模块中。
关于您的问题,我将使用Task.ContniueWith
系列方法而不是async / await
来执行异步延续。但是,如果您希望在特定的SynchronizationContext
(例如UI线程)上调用延续,则必须特别注意提供正确的TaskScheduler
。