public virtual async Task Run(string forwardingBatchId, Predicate <MessageContext> filter, CancellationToken cancellationToken, int?expectedMessageCount) { IReceivingRawEndpoint processor = null; CancellationTokenRegistration?registration = null; try { shouldProcess = filter; targetMessageCount = expectedMessageCount; actualMessageCount = 0; if (Log.IsDebugEnabled) { Log.DebugFormat("Starting receiver"); } var config = createEndpointConfiguration(); syncEvent = new TaskCompletionSource <bool>(); stopCompletionSource = new TaskCompletionSource <bool>(); registration = cancellationToken.Register(() => { Task.Run(() => syncEvent.TrySetResult(true), CancellationToken.None).Ignore(); }); processor = await RawEndpoint.Start(config).ConfigureAwait(false); Log.Info($"Forwarder for batch {forwardingBatchId} started receiving messages from {processor.TransportAddress}."); if (!expectedMessageCount.HasValue) { if (Log.IsDebugEnabled) { Log.Debug("Running in timeout mode. Starting timer."); } timer.Change(TimeSpan.FromSeconds(45), Timeout.InfiniteTimeSpan); } } finally { if (Log.IsDebugEnabled) { Log.DebugFormat($"Waiting for forwarder for batch {forwardingBatchId} to finish."); } await syncEvent.Task.ConfigureAwait(false); registration?.Dispose(); if (processor != null) { await processor.Stop().ConfigureAwait(false); } Log.Info($"Forwarder for batch {forwardingBatchId} finished forwarding all messages."); await Task.Run(() => stopCompletionSource.TrySetResult(true), CancellationToken.None).ConfigureAwait(false); } if (endedPrematurely || cancellationToken.IsCancellationRequested) { throw new Exception("We are in the process of shutting down. Safe to ignore."); } }
public virtual async Task Run(Predicate <MessageContext> filter, CancellationToken cancellationToken, int?expectedMessageCount = null) { IReceivingRawEndpoint processor = null; CancellationTokenRegistration?registration = null; try { Log.DebugFormat("Started. Expectected message count {0}", expectedMessageCount); if (expectedMessageCount.HasValue && expectedMessageCount.Value == 0) { return; } shouldProcess = filter; targetMessageCount = expectedMessageCount; actualMessageCount = 0; Log.DebugFormat("Starting receiver"); var config = createEndpointConfiguration(); syncEvent = new TaskCompletionSource <bool>(); stopCompletionSource = new TaskCompletionSource <bool>(); registration = cancellationToken.Register(() => { Task.Run(() => syncEvent.TrySetResult(true), CancellationToken.None).Ignore(); }); processor = await RawEndpoint.Start(config).ConfigureAwait(false); if (!expectedMessageCount.HasValue) { Log.Debug("Running in timeout mode. Starting timer"); timer.Change(TimeSpan.FromSeconds(45), Timeout.InfiniteTimeSpan); } Log.InfoFormat("{0} started", GetType().Name); } finally { Log.DebugFormat("Waiting for {0} finish", GetType().Name); await syncEvent.Task.ConfigureAwait(false); registration?.Dispose(); if (processor != null) { await processor.Stop().ConfigureAwait(false); } await Task.Run(() => stopCompletionSource.TrySetResult(true), CancellationToken.None).ConfigureAwait(false); Log.DebugFormat("{0} finished", GetType().Name); } if (endedPrematurelly || cancellationToken.IsCancellationRequested) { throw new Exception("We are in the process of shutting down. Safe to ignore."); } }
private async Task StopEndpoint(IReceivingRawEndpoint endpoint) { await endpoint.Stop().ConfigureAwait(false); }
public static async Task Stop() { await serverEndpoint.Stop().ConfigureAwait(false); }
public Task StopAsync(CancellationToken cancellationToken) { Cancel(); return(_endpoint.Stop()); }
/// <summary> /// Stops replaying of subscription messages. /// </summary> /// <returns></returns> public async Task Stop() { await stoppable.Stop().ConfigureAwait(false); }