diff --git a/src/Wolverine/Runtime/Handlers/Executor.cs b/src/Wolverine/Runtime/Handlers/Executor.cs index 8369df38c..64d61293d 100644 --- a/src/Wolverine/Runtime/Handlers/Executor.cs +++ b/src/Wolverine/Runtime/Handlers/Executor.cs @@ -191,7 +191,7 @@ public async Task ExecuteAsync(MessageContext context, Cancellati _tracker.ExecutionFinished(envelope); - return new MessageSucceededContinuation(_tracker); + return MessageSucceededContinuation.Instance; } catch (Exception e) { diff --git a/src/Wolverine/Runtime/MessageContext.cs b/src/Wolverine/Runtime/MessageContext.cs index dc7c31cc2..4419c95e8 100644 --- a/src/Wolverine/Runtime/MessageContext.cs +++ b/src/Wolverine/Runtime/MessageContext.cs @@ -69,7 +69,21 @@ private bool hasRequestedReply() private bool isMissingRequestedReply() { - return Outstanding.Concat(_sent ?? []).All(x => x.MessageType != Envelope!.ReplyRequested); + var replyRequested = Envelope!.ReplyRequested; + foreach (var envelope in Outstanding) + { + if (envelope.MessageType == replyRequested) return false; + } + + if (_sent != null) + { + foreach (var envelope in _sent) + { + if (envelope.MessageType == replyRequested) return false; + } + } + + return true; } /// diff --git a/src/Wolverine/Runtime/MessageSucceededContinuation.cs b/src/Wolverine/Runtime/MessageSucceededContinuation.cs index fa8195b96..1b19bf6e6 100644 --- a/src/Wolverine/Runtime/MessageSucceededContinuation.cs +++ b/src/Wolverine/Runtime/MessageSucceededContinuation.cs @@ -9,17 +9,10 @@ public class MessageSucceededContinuation : IContinuation { public static readonly MessageSucceededContinuation Instance = new(); - private IMessageTracker? _tracker; - private MessageSucceededContinuation() { } - public MessageSucceededContinuation(IMessageTracker tracker) - { - _tracker = tracker; - } - public async ValueTask ExecuteAsync(IEnvelopeLifecycle lifecycle, IWolverineRuntime runtime, DateTimeOffset now, Activity? activity) @@ -30,7 +23,7 @@ public async ValueTask ExecuteAsync(IEnvelopeLifecycle lifecycle, await lifecycle.CompleteAsync(); - (_tracker ?? runtime.MessageTracking).MessageSucceeded(lifecycle.Envelope!); + runtime.MessageTracking.MessageSucceeded(lifecycle.Envelope!); } catch (Exception ex) {