我想在某个方法中调用一个方法,而不希望该过程在其他方法完成时等待或花费时间。
像这样
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;
但是不确定这是否是一个很好的方法。
答案 0 :(得分:0)
基于您共享的代码,我假设您正在使用ASP.NET。我遇到过相同的情况,发现QueueBackgroundWorkItem对我有用,它还允许您在Worker Process停止/关闭时正常关闭长时间运行的任务。
HostingEnvironment.QueueBackgroundWorkItem(cancellationToken =>
{
if (!cancellationToken.IsCancellationRequested)
{
//Do Action
}
else
{
//Handle Graceful Shutdown
}
}
还有更多方法可以完成此操作。我建议您仔细阅读Scott Hanselman撰写的excellent article。