我有一个Windows 8应用程序。
所以我的主要线程是一个UI线程。从我的页面类中,我调用我的方法A,方法A又调用方法B,方法B又调用库方法LibA,它再次调用方法LibB,后者又调用异步方法(AsynLibCAsync)并等待它。
库异步方法实际上是HTTPClient类的 就像这样 链中的所有方法都不是异步的,所以它会陷入死锁,这里很好地解释了 http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html 所以我做的是我制作方法(OnNavigatedTO,A,B)异步。我在A等待B。
根据博客,必须将高级方法设置为Async,以便UI上下文不会挂起。 所以现在就像这样 但是这个电话仍然陷入僵局。
任何帮助都将非常感激。 欢呼声,
Saurav OnNavigatedTo( Page class UI Thread ) -> A ->B-> LibA ->LibB - > httpclient.sendAsync
Async OnNavigatedTo -> AAsync -> BAsync -> LiB A -> LibB -> httpclient.sendAsync
答案 0 :(得分:1)
LibA()
也必须是异步的,以便该方法被称为async ...
尝试而不是在LibA()
中直接调用await Task.Run(() => { LibA(); });
试试BAsync
...