Windows 8应用程序UI线程陷入死锁

时间:2015-01-08 10:17:00

标签: c# multithreading asynchronous

我有一个Windows 8应用程序。

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

库异步方法实际上是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

但是这个电话仍然陷入僵局。 任何帮助都将非常感激。

欢呼声, Saurav

1 个答案:

答案 0 :(得分:1)

LibA()也必须是异步的,以便该方法被称为async ...

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