Устойчивая платформа задач – таймер не срабатываетC#

Место общения программистов C#
Ответить
Anonymous
 Устойчивая платформа задач – таймер не срабатывает

Сообщение Anonymous »

В одной из моих оркестраций таймер основывается на дате, указанной во входном объекте оркестрации. Иногда эту дату необходимо обновить после начала оркестрации. В настоящее время я пытаюсь реализовать событие, которое отменяет существующий таймер и создает новый таймер с обновленной датой.
Я могу успешно отменить существующий таймер, а также могу установить новый таймер, но новый таймер, похоже, не срабатывает.
Изображение

Мой метод onEvent в моей оркестрации находит необходимый обработчик событий на основе входных данных, а затем вызывает метод HandleProcess.

Код: Выделить всё

public override async void OnEvent(OrchestrationContext context, string eventName, string input)
{
IEventHandler eventHandler = await context.ScheduleTask(typeof(GetEventHandler), eventName);

EventHandlerInput eventInput = new EventHandlerInput(context, customState, input);
customState = eventHandler.HandleProcess(eventInput);
}
Метод HandleProcess обработчика событий изменения даты отменяет текущий таймер и планирует новый таймер

Код: Выделить всё

public CustomOrchestrationState HandleProcess(T input)
{
EventHandlerInput customInput = (input as EventHandlerInput);

if (!customInput.CustomOrchestrationState.AllowActionDateChange)
{
//date change not allowed
throw new Exception();
}

DateTime newDate = new DateTime();

try
{
newDate = Convert.ToDateTime(customInput.EventInput);
}
catch (Exception ex)
{
//Invalid Date format
}

CancellationTokenSource newToken = new CancellationTokenSource();
customInput.OrchestrationContext.CreateTimer(newDate, customInput, newToken.Token);

customInput.CustomOrchestrationState.TimerCancelationToken?.Dispose();

CancelCurrentTimer(customInput.CustomOrchestrationState);

customInput.CustomOrchestrationState.ActionDate = newDate;
customInput.CustomOrchestrationState.TimerCancelationToken = newToken;

return customInput.CustomOrchestrationState;
}
В базе данных SQL я вижу, что новый таймер создан, но оркестровка, похоже, зависла, когда новый таймер должен был сработать.
Изображение

Это ожидаемое поведение или это ошибка? Я что-то упускаю или делаю что-то не так?

Подробнее здесь: https://stackoverflow.com/questions/791 ... not-firing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»