2

处理 MVC 4 应用程序。我需要在不阻塞当前操作方法执行的情况下进行某些数据库调用。

public ActionResult Save(Employee e){

  bool saveStatus = EmployeeService.Save(e);

  if(saveStatus){
   AuditService.Add("Employee {0} added successfully", e.Name); //want this async
  }
  return View(e);

}

在上面的代码中,我想让 AuditService 调用异步。

当我保存员工信息时,我需要返回视图而不是等待 AuditService 调用。

我是MVC 4async的新手await

4

3 回答 3

3

正如我在博客中所描述的,async不会更改 HTTP 协议。您要问的是如何从 HTTP 请求中提前返回;async这与/没有任何关系await

关于从 HTTP 请求提前返回:你几乎不想这样做

如果您的“审计”服务实际上是一个日志——并且你对偶尔的日志消息没有被记录完全没问题——那么(并且只有这样)你可以使用我在我的博客上描述的方法。

否则,你不应该早点回来。即,如果您的“审计”服务实际用于审计,或者您希望您的日志准确无误。在这种情况下,您不能提前返回。

于 2013-07-06T15:49:37.267 回答
2

我认为Task在这里使用是一种更好的方法:

if(saveStatus){
    new Task(AuditService.Add("Employee {0} added successfully", e.Name)).Start();
}  

更新:
正如斯蒂芬在他的回答中指出的那样,这可能会导致您正在进行的工作丢失。

于 2013-07-06T06:58:20.410 回答
0

你做错了。您不能在简单控制器的任何操作中运行异步。因为您的客户端代码在服务器代码完成时运行并且没有意义。

根据您的目标,您可以执行以下操作:

于 2013-07-06T16:45:47.107 回答