Windows 8 application UI 线程陷入死锁

Windows 8 application UI Thread falls into deadlock

我有一个 windows 8 申请。

所以我的主线程是 UI 线程。在我的页面类中,我调用方法 A,方法 A 又调用方法 B,方法 B 又调用库方法 LibA,库方法 LibA 又调用方法 LibB,后者又调用异步方法 (AsynLibCAsync) 并等待它。

库异步方法实际上是httpclient.sendAsync HTTPClient 类

是这样的

OnNavigatedTo( Page class UI Thread ) -> A ->B-> LibA ->LibB - > httpclient.sendAsync

链中的所有方法都不是异步的,因此它进入了死锁,正如此处很好地解释的那样

http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

所以我所做的是使方法 (OnNavigatedTO ,A,B) 异步。我在A等B。 根据博客,必须将高级方法设为 Async,这样 UI 上下文就不会挂起。

原来是这样

Async OnNavigatedTo -> AAsync -> BAsync -> LiB A -> LibB -> httpclient.sendAsync

但是调用还是陷入了僵局。 任何帮助将不胜感激。

干杯, 索拉夫

LibA() 也必须是异步的,以便调用异步方法...

尝试在 BAsync 中尝试 await Task.Run(() => { LibA(); }); 而不是直接调用 LibA()...