我想为它添加一个特定的功能,以便在由帖子作者指定的日期和时间安排将来发布帖子。例如,如果我们从用户那里收到这个日期和时间:2020-09-07 14:08:07。
那么,我该如何使用托管服务安排后台任务,只运行一次并更改数据库中的标志并保存更改?
看起来你想在用户指定的日期时间执行后台任务/作业。为实现此需求,你可以尝试使用一些消息队列服务,例如
Azure Queue Storage,它使我们能够通过设置
visibilityTimeout
来指定消息对Dequeue和Peek操作不可见的时间。
当应用程序用户想要创建一个新帖子并指定发布日期时间时,你可以将一条新消息(具有基于用户期望日期时间指定的visibilityTimeout)插入到队列中,这样插入的新消息就只会在队列中指定的日期时间可见。
QueueClient theQueue = new QueueClient(connectionString, "mystoragequeue");
if (null != await theQueue.CreateIfNotExistsAsync())
{
}
var newPost = "Post Content Here";
var user_specified_datetime = new DateTime(2020, 9, 9, 20, 50, 25);
var datetime_now = DateTime.Now;
TimeSpan duration = user_specified_datetime.Subtract(datetime_now);
await theQueue.SendMessageAsync(newPost, duration, default);
然后,您可以实现一个队列触发的后台任务,以从队列中检索消息并更新数据库记录。
注意:
Microsoft Azure Storage Emulator 是一种工具,用于模拟本地开发和测试目的的Azure队列等服务,您可以尝试在本地测试代码而无需创建Azure订阅或产生任何费用。