繁体   English   中英

ASP.NET MVC应用程序中的异步操作

[英]Async actions in asp.net mvc application

我正在尝试在ASP.NET MVC中实现异步操作。 该代码如下所示:

[HttpGet]
public async Task<string> HeavyAction(int holdTime)
{
      await Task.Delay(holdTime);
      return "Now I'm done!";
}

此操作显示了主要问题,即当用户使用较大的参数值(10000)调用该操作时,应用程序没有响应-请求已发送,但浏览器正在等待响应。 我认为因此不应看起来是异步请求。 我认为用户应该能够同时调用其他操作。

有人可以帮我解决我的问题吗? 谢谢! :-)

我认为因此不应看起来是异步请求。

您对“异步等待”的工作方式有误解。 当您的方法等待异步方法时,控制权交还给调用方,在本例中为ASP.NET运行时。 但是,异步等待不会更改HTTP协议的请求-响应性质。 因此,只有Task.Delay完成后,下一行代码才会执行​​,并将响应返回给调用方。

您正在考虑的是一种“即发即弃”的执行方式,您可以在线程池中将委托排队,并立即返回控制权。 这种性质并不真正适用于ASP.NET,如果您的应用程序需要任何规模的扩展,肯定会损害性能。

当您使用“等待”时,您是在告诉C#等待操作完成。 尝试在不使用'await'关键字的情况下调用异步方法。 喜欢:

[HttpGet]
public async Task<string> HeavyAction(int holdTime)
{
      Task.Delay(holdTime);
      return "Now I'm done!";
}

因此该方法将立即返回并稍后执行Task.Delay。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM