在我的WebApi项目中,我有一个端点,应该延迟一小段代码。 让我们举个例子:
我需要实现一种允许客户端预订资源的机制。预订时间应仅为120秒,然后到期。 在代码方面我有类似的东西:
//booking
foreach (var item in list) {
item.Status = ItemStatus.Booked;
}
await _context.SaveChangesAsync();
//Setup a delayed "thread" which removes the booking
Task.Delay( TimeSpan.FromMinutes( 2 ) )
.ContinueWith( x => {
//loop on the list and set the status to "ReadyForSale"
//if this is still in the Booking
} );
return;
我想了解这样的解决方案是否满足我的要求。不应该阻止当前线程延迟任务,我需要找到一种方法将项目列表传递给延迟任务。
答案 0 :(得分:1)
我认为这项任务永远不会运行。如果服务器崩溃或IIS决定它需要回收池,该怎么办?
存在永远无法恢复国家的风险。
我可能会在数据库中设置一个bokedAt
DateTime字段,然后检查与现在相比的时间是否超过两分钟,以确定该项是否已被预订。甚至可能是一个计算列来检查它并返回状态。