如何从WebAPI向客户端应用程序返回值,但同时需要执行一些其他操作
本文关键字:执行 操作 其他 WebAPI 客户端 返回值 应用程序 | 更新日期: 2023-09-27 18:00:30
我有一个在下的WebAPI方法
[HttpPost]
[Route("AddSubProduct")]
public string InsertSubProduct(SubProduct subproduct)
{
try
{
subProductRepository.InsertSubProduct(subproduct);
// This message must be returned to the client application as soon
// as the product is created
subproduct.ToString();
// This will happen parallely
DoSomethingElse(subproduct);
}
catch (Exception ex)
{
throw ex;
}
}
可以看出,subproduct.Tostring()
将首先立即发送到客户端应用程序(一旦创建产品),DoSomethingElse将独立工作(尽管当前的实现不是这样的,但我们必须这样做)。可以看出,我不能在这里使用返回语句。
我该怎么做?
您需要对后台线程上的工作进行排队。如果您正在使用,我建议使用HostingEnvironment.QueueBackgroundWorkItem
。NET 4.5.2。如果使用的是早期版本,请使用BackgroundTaskManager
。两人都将在ASP上注册他们的作品。NET运行时:
[HttpPost]
[Route("AddSubProduct")]
public string InsertSubProduct(SubProduct subproduct)
{
subProductRepository.InsertSubProduct(subproduct);
HostingEnvironment.QueueBackgroundWorkItem(cancellationToken =>
DoSomethingElse(subproduct));
return subproduct.ToString();
}
如果您要经常对并发请求执行此操作,则应该考虑排队并让单个线程出列并处理它们。如果坚持在这里很重要,那么你需要选择一条不同的路线。
旁注-不要捕捉无法处理的异常。特别是,不要使用throw ex
,你会失去堆栈竞争。