Hello All,
I have a simple Saga State Machine like below.
using System;
using Automatonymous;
using MassTransit;
using OrderService.SagaStateMachines.States;
using Shared.Messages.Commands;
namespace OrderService.SagaStateMachines
{
public class OrderStateMachine :
MassTransitStateMachine<OrderState>
{
public Schedule<OrderState, OrderCompletionTimeoutExpired> OrderCompletionTimeout { get; }
public OrderStateMachine()
{
Event(() => SubmitOrder, x => x.CorrelateById(context => context.Message.OrderId));
Event(() => TimeoutExpired, x => x.CorrelateById(context => context.Message.CorrelationId));
Schedule(() => OrderCompletionTimeout, instance => instance.OrderCompletionTimeoutTokenId,
s => { s.Delay = TimeSpan.FromSeconds(10); });
InstanceState(i => i.CurrentState);
Initially(
When(SubmitOrder)
.Schedule(OrderCompletionTimeout,
context => context.Init<OrderCompletionTimeoutExpired>(new {context.Instance.CorrelationId}))
.TransitionTo(OrderSubmitted)
.Unschedule(OrderCompletionTimeout)
);
DuringAny(When(TimeoutExpired).Finalize());
}
public Event<SubmitOrder> SubmitOrder { get; private set; }
public State OrderSubmitted { get; private set; }
private Event<OrderCompletionTimeoutExpired> TimeoutExpired { get; } = default!;
}
}
My problem is here that, even I unschedule (.Unschedule(OrderCompletionTimeout)) the timeout after receiving SubmitOrder, it still timeout and transit to Final state (DuringAny(When(TimeoutExpired).Finalize())) after 10 seconds. What am I doing here wrong?
Thanks.