2014-02-21 36 views
1

我正在开发一个应该实现多线程功能的ASP.NET MVC项目。实际上,在这个应用程序中,用户可以从一个页面导航到另一个页面,因此他可以改变他当前控制器的动作。我的问题是,ASP.NET MVC中有没有一种方法可以保证动作在后台运行,即使用户切换了动作。这意味着,即使他在航行后返回视图,他也可以得到他在本次会议中发布的内容(知道它可能需要一些时间才能做到)。我知道这与它的矛盾MVC模式,但是这个应用程序应该是一个服务器端应用程序。多线程和异步动作调用与ASP.NET MVC

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

回答

1

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

对于这个工作我想你想要的方式运行,则需要通过会话ID的一键共享缓存。您的异步任务将在那里存储他们的结果。您需要一些在应用程序初始化时初始化的中间件,该中间件将由一个托管线程池和一个缓冲的任务队列组成。您的UI线程/ Web服务器线程会为中间件排队任务,以便将结果处理并将结果转储到共享缓存中,然后您将检查来自该客户端的后续Web请求的结果。这是很多工作。尤其是如果您的客户端和服务器端应用程序已经像ASP.NET中一样紧密地绑定在一起。

或者,你可以从ASP.NET移开应用程序和执行服务器端应用程序,在C#中,你的客户端应用程序,Javascript编写的,将打击使用AJAX请求REST API。您在一些js MVC框架中将客户端应用程序构建为单页应用程序。这将允许用户以无缝的体验访问客户端应用程序,因为除非客户端应用程序希望它们成为服务器,否则对服务器的调用是非阻塞的。那么真的不需要上面提到的异步模式,它实际上不会给你带来任何性能提升,并且它不会很好地扩展。

+0

感谢您的答复,我thouht关于AJAX和台异步调用作为解决我的问题,这将通过的ASP.NET Web API可以轻松实现。但是,当涉及线程时,不应该以任何方式中断这些的执行,并且考虑到用户刚刚实现的状态也应该存储在一些现金中(即使他跳到其他动作和控制器上时) ,你提出的middelware解决方案是不可避免的。 –