【发布时间】:2015-11-16 04:40:23
【问题描述】:
我正在尝试在 ASP.NET MVC 中实现异步操作。代码如下:
[HttpGet]
public async Task<string> HeavyAction(int holdTime)
{
await Task.Delay(holdTime);
return "Now I'm done!";
}
此操作显示了主要问题,即当用户使用大参数值 (10000) 调用操作时,应用程序没有响应 - 请求已发送,但浏览器正在等待响应。我认为不应该看起来是一个异步请求。在我看来,用户应该能够同时调用其他操作。
有人可以帮我解决我的问题吗?谢谢! :-)
【问题讨论】:
-
你是怎么调用这个方法的?按钮还是 JavaScript?
-
来自查询字符串,因为我正在测试异步等待机制。该动作被调用,但我没有看到异步行为。是否可以在 Web 应用程序中通过 async-await 获得它?
-
@sm4artGuy async 并不意味着该方法将在后台异步运行。这意味着在等待你用'await'关键字做的工作时,它不会占用一个线程,允许线程被另一个请求使用。工作完成后,其余代码将再次占用一个线程来完成请求。所以它不是异步做工作,而是异步等待以更有效地使用系统资源。
-
@serhatozgel 哦,现在我明白了。在这种情况下,最后一个问题。有没有办法异步上传(上传逻辑执行以便用户能够做其他事情,当下载完成时他会收到电子邮件或其他东西)?
-
我的建议是使用 iframe,然后在该 iframe 中托管您的页面并上传文件。确保您使用只读会话状态,或根本不使用会话状态。这样,您可以并行上传所有文件。您还可以查询服务器以查看文件上传的状态,因为您没有阻止会话。看看 JavaScript 插件 upload-at-click (旧但仍然可以正常工作)。 Https://code.google.com/p/upload-at-click
标签: c# asp.net-mvc asynchronous async-await