我创建了全新的asp.net mvc 3项目。然后我在Web.config
文件中添加了以下字符串:
<compilation debug="false" targetFramework="4.5"/>
<httpRuntime targetFramework="4.5" executionTimeout="1"/>
以及Index
行动中的以下说明:
System.Threading.Thread.Sleep(30000);
睡了30秒后,我可以看到索引视图。为什么httpRuntime
属性不起作用?我创建了一个新的测试项目,因为我无法在我的工作项目中实现超时。我的工作项目在iis上运行,而iis express上的测试项目正在运行。
我做错了什么?
我尝试了这个答案的所有内容而没有运气https://stackoverflow.com/a/13886618/290082
答案 0 :(得分:2)
&lt; httpRuntime executionTimeout&gt;属性不适用于ASP.NET MVC之类的异步框架。相反,应该使用像CancellationToken这样的合作取消机制。这是一个例子:
[AsyncTimeout(30000 /* 30 seconds */)]
public ActionResult YourMethod(..., CancellationToken token) {
// perform some long-running work
while (StillNeedToPerformWork()) {
DoSomeWork();
token.ThrowIfCancellationRequested();
}
return ...;
}
我相信上面的例子需要 MVC 4 或更高版本。 MVC框架将自动读取[AsyncTimeout]属性并提供正确的CancellationToken实例作为操作方法的参数。
有关如何使用代码中的CancellationToken的详细信息,请参阅http://msdn.microsoft.com/en-us/library/dd997364(v=vs.110).aspx。