首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >银光和等待都失败了

银光和等待都失败了
EN

Stack Overflow用户
提问于 2014-06-11 11:57:44
回答 1查看 35关注 0票数 1

我需要通过IoC解析一个属性,如果不存在的话,必须在数据库上使用。我所有的储存库都在形式上

代码语言:javascript
运行
复制
  Task<FilterResponse> GetFiltersForInquiries(int idIstituto);

但是,当等待/结果被调用时,我冻结了UI,没有调用webservice

我的呼叫代码是

代码语言:javascript
运行
复制
   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秒)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-11 12:02:30

Result属性和Task上的Wait()方法正在阻塞。当从UI线程调用时,这是一个众所周知的死锁原因,因为一旦任务完成,将试图在被阻塞的UI线程上执行延续,因此它无法执行该继续。

若要避免此问题,请尝试将代码更改为:

代码语言:javascript
运行
复制
var res = await repository.GetFiltersForInquiries(84);

这个由Stephen编写的文章解释了如何避免async/await的常见缺陷。

或者,您可以尝试在进行容器注册之前调用您的async代码。

代码语言:javascript
运行
复制
var repository = container.GetInstance<IBodInquiryRepository>();
var res = await repository.GetFiltersForInquiries(84);
var container = new Container();

container.RegisterSingle<IBodInquiryRepository>(new BodInquiryRepository());


container.RegisterSingle<FilterResponse>(res);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24162370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档