【发布时间】:2017-02-23 15:25:48
【问题描述】:
在我的 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;
我想了解这样的解决方案是否满足我的要求。当前线程不应该被延迟任务阻塞,我需要找到一种方法将项目列表传递给延迟任务。
【问题讨论】:
-
试试看吧。 你告诉我们这是否适合你。如果它不起作用,请解释它如何无法完成您希望它做的事情。
-
你是对的,这主要是一个验证请求。我实际上缺少的是它在幕后是如何工作的。延迟的任务在哪里?这种工作方式在 webapi 中有什么缺点吗?和这样的事情
-
如果应用程序池回收(在许多可能的事件中)此代码将无法运行,这对您来说重要吗?如果是这样,您可能需要考虑另一种策略(例如,记录
BookedDate而不是纯粹的Booked状态,然后在BookedDate过去超过 2 分钟时允许新预订(这有问题方法也是如此,尤其是当您希望扩展到多台服务器时,但可以处理它们)) -
@Servy:我也可以这么说:但你没有做出任何贡献。我真的不理解那些花时间批评、投反对票或类似事情而不是花时间提供帮助的人。无论如何,感谢您的发现。
-
是的,但在作者说出我在第一条评论中所写的内容后,我不再继续争论。请,如果您不想就这个问题提供帮助,请让其他人去做。
标签: c# asp.net-web-api concurrency task