延迟一段代码

时间:2017-02-23 15:25:49

标签: c# asp.net-web-api concurrency task

在我的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;

我想了解这样的解决方案是否满足我的要求。不应该阻止当前线程延迟任务,我需要找到一种方法将项目列表传递给延迟任务。

1 个答案:

答案 0 :(得分:1)

我认为这项任务永远不会运行。如果服务器崩溃或IIS决定它需要回收池,该怎么办?
存在永远无法恢复国家的风险。

 我可能会在数据库中设置一个bokedAt DateTime字段,然后检查与现在相比的时间是否超过两分钟,以确定该项是否已被预订。甚至可能是一个计算列来检查它并返回状态。