【发布时间】:2014-02-06 06:30:06
【问题描述】:
我有一个 ASP.Net MVC 4 应用程序,它定期调用外部 API 以获取信息(资源)。此资源对帐户有一个速率限制器(意味着其他应用程序使用相同的池并可能达到限制)。当达到此限制时,它将在几秒钟内(假设为 25 秒)发回带有“Retry-After”标头的 HTTP 状态代码 429。
如果我的应用收到此响应,我将需要延迟执行 25 秒并重试。首先,让我说运行此代码的方法是 ASP.Net 4.5 Async 方法。为此,我正在考虑使用System.Threading.Thread.Sleep(25000) 现在,我真的不喜欢使用这个,有没有更好的方法?
我不得不说我为这个开放式问题道歉,但我找不到任何关于延迟执行的正确方式(同时保持异步并确保我们不会用完线程)
更新: 下面的代码对于延迟会更好吗?
await Task.Run(() => Thread.Sleep(10000))
【问题讨论】:
-
25 秒是很多时间。如果同时运行您的网络应用程序的客户端浏览器超时怎么办?
-
抱歉耽搁了,老实说,我不确定,最大延迟是 30 秒,这一切都发生在 ajax 调用期间,所以我不确定它是如何工作的。我会调查这个
-
要进一步了解 AJAX 理念,请查看:Long Running Background Tasks in Asp.Net MVC3。
标签: c# .net asp.net-mvc-4 async-await asp.net-4.5