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()
...
我有一个 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()
...