asp.net-mvc – 在ASP.NET MVC 3 Action方法中并行运行任务
发布时间:2020-12-16 04:19:23 所属栏目:asp.Net 来源:网络整理
导读:我在ASP.NET MVC 3应用程序中有一个搜索操作,它返回包含给定关键字的建议和建议: [HttpPost]public ActionResult Search(string query,int pg = 0){ var keywords = query.Split(new[] { ' ',',';' },StringSplitOptions.RemoveEmptyEntries); var containi
我在ASP.NET MVC 3应用程序中有一个搜索操作,它返回包含给定关键字的建议和建议:
[HttpPost] public ActionResult Search(string query,int pg = 0) { var keywords = query.Split(new[] { ' ',',';' },StringSplitOptions.RemoveEmptyEntries); var containing = (from s in _readonlySession.All<Suggestion>() from k in keywords where (s.Text.ToLower().Contains(k.ToLower())) orderby s.Text select s).Distinct(); var tagged = (from t in _readonlySession.All<Tag>() from s in t.Suggestions from k in keywords where t.Text.ToLower().Contains(k.ToLower()) orderby s.Text select s).Distinct(); var model = new SearchViewModel { Query = query,Containing = containing.ToList(),Tagged = tagged.ToList() }; return View(model); } 我认为包含和标记的查询可以完美地并行运行. 同时触发这两个查询的最佳方法是什么,等待结果,并且仅在两个查询完成时返回? 解决方法
任务Parallels库是您的最佳选择.通过Google获取大量信息,但下面是您的实施可能的样子.
[HttpPost] public ActionResult Search(string query,StringSplitOptions.RemoveEmptyEntries); IEnumerable containing=null; Task t1 = Task.Factory.StartNew(() => { containing = (from s in _readonlySession.All<Suggestion>() from k in keywords where (s.Text.ToLower().Contains(k.ToLower())) orderby s.Text select s).Distinct().ToList(); }); IEnumerable tagged=null; Task t2 = Task.Factory.StartNew(() => { var tagged = (from t in _readonlySession.All<Tag>() from s in t.Suggestions from k in keywords where t.Text.ToLower().Contains(k.ToLower()) orderby s.Text select s).Distinct().ToList(); }); t1.Wait(); t2.Wait(); var model = new SearchViewModel { Query = query,Tagged = tagged.ToList() }; return View(model); } 请记住,如果您的应用程序收到大量请求,您可能最好不要异步执行查询 – 消耗2个额外的线程来为一个请求提供服务会使资源远离其他传入请求.如果您有大量流量,或者您的硬件不合适,这只会是一个问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET Active Directory成员资格提供程序和SQL配置文件提
- asp.net – 为什么我无法访问usercontrol中的页面viewstate
- asp.net – 无论如何要在上传之前确定文件大小?
- asp.net-mvc – 未找到MVC 6 404
- asp.net-mvc – ASP.NET MVC视图或URL应该有多少级别?
- asp.net中mvc使用ajax提交参数的匹配问题解决探讨
- ASP.NET MVC 5从Javascript Error调用控制器方法
- asp.net-mvc – 从asp.net mvc控制器返回一个js文件
- asp.net-mvc – 如何将MVC添加到现有的Web API项目中
- .net – 使用OData $select来从相关对象中挑选字段