我需要通过IoC解析一个属性,如果不存在的话,必须在数据库上使用。我所有的储存库都在形式上
Task<FilterResponse> GetFiltersForInquiries(int idIstituto);但是,当等待/结果被调用时,我冻结了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;
});既然我不能放异步/等待,我能做什么?如果我在WPF下,我就会进行同步调用(这需要6-7秒)。
发布于 2014-06-11 12:02:30
Result属性和Task上的Wait()方法正在阻塞。当从UI线程调用时,这是一个众所周知的死锁原因,因为一旦任务完成,将试图在被阻塞的UI线程上执行延续,因此它无法执行该继续。
若要避免此问题,请尝试将代码更改为:
var res = await repository.GetFiltersForInquiries(84);这个由Stephen编写的文章解释了如何避免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);https://stackoverflow.com/questions/24162370
复制相似问题