webapi怎么长久状态保持

更新时间:02-10 综合 由 争端 分享

我有这种情况下,我有一个WebApi和一个端点,当被触发时做了很多工作(大约2-5分钟)。这是一个带有副作用的POST端点,我想限制执行,以便如果发送2个请求到这个端点(不应该发生,但是比对不起更安全),其中一个请等待以避免竞争条件。如何在WebApi操作中锁定长时间的异步调用

我第一次尝试使用一个简单的静态锁控制器内是这样的:

lock (_lockObj) 

  var results = await _service.LongRunningWithSideEffects() 

  return Ok(results) 

这是因为lock语句内await的当然是不可能的。

我考虑的另一个解决方案是使用一个SemaphoreSlim实现这样的:

await semaphore.WaitAsync() 

try 

  var results = await _service.LongRunningWithSideEffects() 

  return Ok(results) 

finally 

  semaphore.Release() 

然而,根据MSDN:的SemaphoreSlim类表示可用于重量轻,快速旗语等待时间在之间,等待时间预计会很短。

由于在这种情况下,等待时间甚至可能会达到5分钟,我应该如何使用并发控制

我明白,通过此任务到服务可能是最佳的方式,但是,我不一定要排队在仍然运行在后台的东西请求完成后。 该请求涉及需要一些时间的其他请求和集成,但我仍然希望用户等待此请求完成并获得响应。 这个请求预计只能在特定时间每天由cron作业触发一次。但是,也有一个选择可以由开发人员手动触发它(主要是为了防止作业出现问题),并且我想确保如果开发人员(例如,开发人员)不会遇到并发问题偶然发送请求等。

声明:关于《webapi怎么长久状态保持》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/all/15_5963299.html