У нас есть логика c, чтобы фоновое задание продолжалось, или каждые 20 минут, или когда задание завершалось.
Упрощенная версия того, что я хочу сделать, выглядит следующим образом:
Задача для контроля, если нам нужно выйти:
private static TaskCompletionSource<bool> forceSyncTask = new TaskCompletionSource<bool>();
Фоновое задание:
Task.Factory.StartNew(
async () =>
{
do
{
await Dosomething();
await Task.WhenAny(Task.Delay(TimeSpan.FromMinutes(20)), forceSyncTask.Task);
// Always reset the force sync property
forceSyncTask = new TaskCompletionSource<bool>();
}
while (true);
});
Затем, каждый раз, когда приходит уведомление, я запускаю следующую команду, чтобы заставить выйдите из Задачи. Когда
if (!forceSyncTask.Task.IsCompleted)
{
forceSyncTask.TrySetResult(true);
}
Я проверил его в dev box, и он работает. Однако после того, как я развернул его на нашем веб-сервисе в среде prod, даже если я успешно установил SetResult (я должен войти в систему, чтобы узнать, возвращает ли TrySetResult значение true или нет), Task.WhenAny не завершается, как ожидалось.
У любого есть любой идея почему?