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秒)

Silverlight和Wait失败了

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);