Я хочу добавить к нему определенную функциональность, чтобы запланировать публикацию сообщения в будущем в дату и время, указанные автором сообщения. Например, если мы получим эту дату и время от пользователя: 2020-09-07 14:08:07 .
Тогда как я могу запланировать для него фоновую задачу, используя размещенные службы для запуска только один раз, изменить флаг в базе данных и сохранить изменения после этого?
Похоже, вы хотите выполнить фоновую задачу/задание в указанное пользователем время и дату, чтобы выполнить требование, вы можете попробовать использовать некоторые службы очереди сообщений, такие как Azure Queue Storage, которые включают нам указать, как долго сообщение должно быть невидимым для операций Dequeue и Peek, установив visibilityTimeout
.
Пока пользователь вашего приложения хочет создать новую публикацию и указать время публикации, вы можете вставить новое сообщение (с указанным параметром visibilityTimeout на основе ожидаемой пользователем даты и времени) в очередь, чтобы это новое вставленное сообщение было видно только в указанную дату. время в очереди.
QueueClient theQueue = new QueueClient(connectionString, "mystoragequeue");
if (null != await theQueue.CreateIfNotExistsAsync())
{
//The queue was created...
}
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 Эмулятор — это инструмент, который эмулирует службы очередей Azure и т. д. для целей локальной разработки и тестирования. Вы можете попробовать протестировать код для служб хранилища локально, не создавая подписку Azure и не неся никаких затрат.
person
Fei Han
schedule
09.09.2020