继续执行方法,无需等待其他方法执行

时间:2018-10-22 08:10:49

标签: c# asp.net-mvc

我想在某个方法中调用一个方法,而不希望该过程在其他方法完成时等待或花费时间。

像这样

public ActionResult Insert(int userId)
{
     _userService.Insert(userId);
     SyncUserInSomeOtherCollection(userId);
     return new EmptyResult();
}

private SyncUserInSomeOtherCollection(int userId)
{
  //Do Sync work which will actually take some time
}

我想使SyncUserInSomeOtherCollection()以这种方式工作,以便主方法无需等待即可返回结果。

我试图运行这样的任务

Task.Run(async () => await SyncUserInSomeOtherCollection(userId)).Result;

但是不确定这是否是一个很好的方法。

1 个答案:

答案 0 :(得分:0)

基于您共享的代码,我假设您正在使用ASP.NET。我遇到过相同的情况,发现QueueBackgroundWorkItem对我有用,它还允许您在Worker Process停止/关闭时正常关闭长时间运行的任务。

HostingEnvironment.QueueBackgroundWorkItem(cancellationToken =>
{
  if (!cancellationToken.IsCancellationRequested)
  {
    //Do Action
  }
  else
  {
    //Handle Graceful Shutdown
  }
}

还有更多方法可以完成此操作。我建议您仔细阅读Scott Hanselman撰写的excellent article