使用ASP.NET MVC进行多线程和异步操作调用调用

时间:2014-02-21 17:16:41

标签: c# asp.net-mvc multithreading asp.net-mvc-4

我正在开发一个应该实现多线程功能的ASP.NET MVC项目。事实上,在这个应用程序中,用户可以从一个页面导航到另一个页面,因此他可以更改当前控制器的操作。我的问题是,ASP.NET MVC中是否有一种方法可以保证操作在后台运行,即使用户已切换操作。这意味着即使他在导航后返回View,他也可以获得他在当前会话中发布的内容(知道可能需要一些时间才能完成)。我知道它与之相矛盾。 MVC模式,但此应用程序应该是服务器端应用程序。

我做了一些研究,他们说线程池和异步控制器(http://msdn.microsoft.com/en-us/library/ee728598%28v=vs.100%29.aspx#performing_multiple_operations_in_parallel)可能是解决这个问题的方法。我很乐意听到任何其他建议来帮助我以正确的方式实施这个项目。

1 个答案:

答案 0 :(得分:1)

我认为您应该重新访问这应该实现并行模式的前提。

为了让我按照我认为您想要的方式工作,您将需要一个由会话ID键入的共享缓存。您的异步任务将在那里存储他们的结果。您将需要一些在应用程序初始化时初始化的中间件,此中间件将包含一个托管线程池和一个缓冲的任务队列。您的UI线程/ Web服务器线程会为中间件排队任务,以处理结果并将结果转储到共享缓存中,然后您将检查来自该客户端的后续Web请求的结果。这是很多工作。特别是如果您的客户端和服务器端应用程序已经密切联系在一起,就像它们通常在ASP.NET中一样。

或者,您可以将应用程序从ASP.NET移开,并将服务器端应用程序实现为C#中的REST API,您的客户端应用程序(使用Javascript编写)将使用ajax请求命中。您在一些js MVC框架中将客户端应用程序构建为单页面应用程序。这将允许用户在客户端应用程序中获得无缝体验,因为对服务器的调用是非阻塞的,除非客户端应用程序想要它们。那么你真的不需要上面提到的异步模式,老实说这些模式不会给你带来任何性能提升,也不会很好地扩展。