C# 在.NET MVC应用程序中处理异步情况
我想了解一些基本的.NETMVC知识,所以我开始开发一个非常简单的应用程序,有点类似于Yelp。它由C# 在.NET MVC应用程序中处理异步情况,c#,asp.net-mvc,C#,Asp.net Mvc,我想了解一些基本的.NETMVC知识,所以我开始开发一个非常简单的应用程序,有点类似于Yelp。它由用户对象和业务对象组成。用户可以将企业添加到他们的“观察列表”中,当有人为该企业创建评论时,应用程序将查看“用户id-企业id”关系表,并通过电子邮件向关注该企业的用户发送新评论(以便他们可以回复) 在我的ReviewsController中,我有一个创建审阅的Create操作。在该操作返回之前,我想运行一个方法来检查是否有针对刚刚创建该评论的业务的手表 这就是我陷入困境的地方,因为我不确定在MV
用户
对象和业务
对象组成。用户可以将企业添加到他们的“观察列表”中,当有人为该企业创建评论时,应用程序将查看“用户id-企业id”关系表,并通过电子邮件向关注该企业的用户发送新评论(以便他们可以回复)
在我的ReviewsController
中,我有一个创建审阅的Create
操作。在该操作返回之前,我想运行一个方法来检查是否有针对刚刚创建该评论的业务的手表
这就是我陷入困境的地方,因为我不确定在MVC设置中,什么是一种好的方法(?)
我所知道的是,创建评论的用户不需要等待应用程序查看“用户业务”关系表
将此查找功能创建为异步方法是一个好主意吗?我也研究了事件,但似乎事件在MVC环境中并不理想。MVC世界中是否有针对此类情况的成熟模式?您可以使用创建异步任务。以下代码在完成创建线程并执行方法checkwatchs
时执行CreateReview
方法。同时,它返回操作Create
而不等待新线程完成
public ActionResult Create()
{
// User related task
CreateReview();
Task.Factory.StartNew(() =>
{
// system related task
CheckWatches();
});
return View();
}
另一种方法是在视图中使用ajax。Ajax被设计为异步的,因此,它适合您的使用 无论何时单击PostReview按钮,都会向服务器发送一个ajax请求,以并行执行CheckWatches操作 下面是一个指向ajax调用的简单示例的链接:
@Jonathan Tyson指出了这一点,这显示了一些很好的背景tak选项 我正在考虑使用
QueueBackgroundWorkItem
,因为它似乎非常适合我的场景。它已经内置在.NET4.5.2中,它完成了我想要的一切
要注意90秒的限制(对每个人来说可能不是一个很好的解决方案)。就我而言,这已经足够了。请注意,触发并忘记通常是个坏主意,因为无法知道操作是否成功,有时它会导致在失败时简单地终止进程。。。另外,如果
checkwatchs
错误地访问任何请求的数据,在37%的情况下,它会爆炸得惊人。我真的想知道如果使用任务并行不合适,更好的方法是什么。这是async void
方法适用的场景之一。它本质上是一种“火与忘”的方式。有关不同方法的概述,以及使用“火与忘”任务的注意事项,请参见。我必须知道创建[HttpPost]操作是成功的吗?我不想每次单击按钮时都触发Ajax调用,因为创建可能会失败,而评审从一开始就不会创建。然后,在创建操作成功后,在视图中触发Ajax调用,