Silverlight和Wait失败了
本文关键字:失败 Wait Silverlight | 更新日期: 2023-09-27 18:08:20
我需要通过IoC解析一个属性,如果不存在,必须在数据库中采取。我的所有存储库的格式为
Task<FilterResponse> GetFiltersForInquiries(int idIstituto);
但是当Wait/Result被调用时,我得到了UI冻结并且没有对webservice进行调用
我的呼叫码是
var container = new Container();
container.RegisterSingle<IBodInquiryRepository>(new BodInquiryRepository());
container.RegisterSingle<FilterResponse>(() =>
{
var repository = container.GetInstance<IBodInquiryRepository>();
var res = repository.GetFiltersForInquiries(84).Result;
return res;
});
既然我不能把async/await我能做什么?如果我在WPF下,我会做一个同步调用(需要6-7秒)
Task
上的Result
属性和Wait()
方法阻塞。当从UI线程调用时,这是一个众所周知的死锁原因,因为一旦任务完成,延续将试图在UI线程上执行,而UI线程被阻塞,因此无法执行延续。
要避免这个问题,请尝试将代码更改为:
var res = await repository.GetFiltersForInquiries(84);
Stephen Cleary的这篇文章解释了如何避免async/await
的常见缺陷。
或者你可以尝试在做容器注册之前调用你的async
代码。
var repository = container.GetInstance<IBodInquiryRepository>();
var res = await repository.GetFiltersForInquiries(84);
var container = new Container();
container.RegisterSingle<IBodInquiryRepository>(new BodInquiryRepository());
container.RegisterSingle<FilterResponse>(res);