处理ASP.NET MVC中的异步请求
发布时间:2020-05-27 11:31:40 所属栏目:asp.Net 来源:互联网
导读:我有一个ASP.NET MVC3应用程序,可以处理耗时的进程(从网络复制大文件).我们想要做的是: 用户单击按钮以发布表单以触发该过程 应用程序启动一个新线程以开始复制文件 应用程序显示一条消息,指出文件复制过程已经开始 用户可以在复制处理并在后台完成复制时关
|
我有一个ASP.NET MVC3应用程序,可以处理耗时的进程(从网络复制大文件).我们想要做的是: >用户单击按钮以发布表单以触发该过程 这个想法是用户不需要对过程的进度进行任何确认,也不会在过程完成时得到通知. 我们目前让控制器在Windows服务中触发事件,并使用Windows服务执行实际工作.我想知道是否有更好/更清洁的方法来做到这一点? 解决方法您可以使用 System.Threading.Tasks.Task使用 Action delegate调用 StartNew方法.使用这些工具你的控制器看起来像这样: [HttpPost]
public ActionResult DoSomethingLongRunning()
{
if (ModelState.IsValid)
{
Task.Factory.StartNew(() =>
fileCopier.CopyFile(CopyFileParameter1,CopyFileParameter2));
return RedirectToAction("View Indicating Long Running Progress");
}
else
{
// there is something wrong with the Post,handle it
return View("Post fallback view");
}
}
另一个选择是你可以使用System.Reactive.Concurrency和IScheduler接口与TaskPoolScheduler作为执行操作的具体实现(可能在控制器构造函数中注入. public ActionResult DoSomethingLongRunning()
{
if (ModelState.IsValid)
{
ISchedulerImplementation.Schedule(new Action(() =>
{
fileCopier.CopyFile(CopyFileParameter1,CopyFileParameter2);
}));
return RedirectToAction("View Indicating Long Running Progress");
}
else
{
// there is something wrong with the Post,handle it
return View("Post fallback view");
}
}
作为一个好处,如果你这样做,你可以在单元测试时使用TestScheduler作为接口的实现. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- asp.net-mvc-5 – 在GenerateUserIdentityAsync方
- asp.net-mvc – 在ASP.NET MVC6中访问querystrin
- ASP.NET MVC3 AJAX.BeginForm AjaxOptions OnSuc
- asp.net-mvc – 为一个MVC视图使用两个强类型模型
- asp.net-mvc – 在MVC中检查图像mime,大小等
- asp.net-mvc – 在cshtml中折叠C#块并保存
- asp.net – CultureInfo.CurrentCulture从中读取
- asp.net-mvc – 使用asp.net mvc 2功能与火花浏览
- asp经典 – 经典ASP文本替换和UTF-8编码
- asp.net-mvc – 在AppHarbor上获取文件内容
热点阅读
