首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Web API异步超时

Web API异步超时
EN

Stack Overflow用户
提问于 2015-09-18 17:47:26
回答 1查看 2.8K关注 0票数 0

我在一个Web api控制器中有一个现有的方法,它从一个内部API返回数据。此方法目前大约需要6秒才能完成

我需要调整此方法,以便向外部API发送最多4个请求,然后将结果保存到数据库。

每次调用外部API大约需要2-3秒才能完成。

虽然对外部API的调用很重要,但我不能延迟用户体验。因此,同步调用外部api不是一个选项,因为每次调用可能需要3秒*4= 12秒,然后必须调用内部api (5秒)= 17秒

为了解决这个问题,我做了以下更改:

使Web API方法异步创建异步调用外部api并返回任务的方法

-内部接口方法调用前,调用方法4次,将结果添加到列表中,使用Task.Delay()创建timeoutTask,持续5秒;

--调用内部API方法

循环遍历任务列表调用task.WhenAny( timeoutTask,timeoutTask)如果任务已完成但任务未完成,则它已超过超时,因此停止处理。

为了演示这个问题,我创建了一个新的Index MVC Web项目,并将等效代码添加到HomeController上的ASP.NET ()方法中。

我还添加了一个AsyncUnitTests.cs类,它具有与Web API方法完全相同的代码。

奇怪的是,单元测试按照我的预期工作,而web api调用不是这样。

有谁有什么想法吗?

示例应用程序:WebAPIAsync.zip

EN

回答 1

Stack Overflow用户

发布于 2015-09-18 18:24:53

我已经解决了!WebAPIAsyncWorking.zip

本质上-所有等待调用都需要调用.ConfigureAwait(false)方法,以确保它可以在不同的上下文中继续。

为了将来参考,我已经在这里上传了工作解决方案...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32648951

复制
相关文章

相似问题

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