public Task Shutdown(TimeSpan timeout) { // if receiver was already shutdown, do nothing if (ReceiverShutdown == Interlocked.Exchange(ref recieverState, ReceiverShutdown)) { return(TaskDone.Done); } logger.Info("Stopping reading from EventHub partition {0}-{1}", settings.Hub.Path, settings.Partition); // clear cache and receiver IEventHubQueueCache localCache = Interlocked.Exchange(ref cache, null); EventHubReceiver localReceiver = Interlocked.Exchange(ref receiver, null); // start closing receiver Task closeTask = TaskDone.Done; if (localReceiver != null) { closeTask = localReceiver.CloseAsync(); } // dispose of cache localCache?.Dispose(); // finish return receiver closing task return(closeTask); }
public Task Shutdown(TimeSpan timeout) { logger.Info("Stopping reading from EventHub partition {0}-{1}", config.Hub.Path, config.Partition); // clear cache and receiver IEventHubQueueCache localCache = Interlocked.Exchange(ref cache, null); EventHubReceiver localReceiver = Interlocked.Exchange(ref receiver, null); // start closing receiver Task closeTask = TaskDone.Done; if (localReceiver != null) { closeTask = localReceiver.CloseAsync(); } // dispose of cache localCache?.Dispose(); // finish return receiver closing task return(closeTask); }
public Task Shutdown(TimeSpan timeout) { // clear cache and receiver IEventHubQueueCache localCache = Interlocked.Exchange(ref cache, null); EventHubReceiver localReceiver = Interlocked.Exchange(ref receiver, null); // start closing receiver Task closeTask = TaskDone.Done; if (localReceiver != null) { closeTask = localReceiver.CloseAsync(); } // dispose of cache if (localCache != null) { localCache.Dispose(); } // finish return receiver closing task return(closeTask); }
public async Task Shutdown(TimeSpan timeout) { var watch = Stopwatch.StartNew(); try { // if receiver was already shutdown, do nothing if (ReceiverShutdown == Interlocked.Exchange(ref recieverState, ReceiverShutdown)) { return; } logger.Info("Stopping reading from EventHub partition {0}-{1}", settings.Hub.Path, settings.Partition); // clear cache and receiver IEventHubQueueCache localCache = Interlocked.Exchange(ref cache, null); var localReceiver = Interlocked.Exchange(ref receiver, null); // start closing receiver Task closeTask = Task.CompletedTask; if (localReceiver != null) { closeTask = localReceiver.CloseAsync(); } // dispose of cache localCache?.Dispose(); // finish return receiver closing task await closeTask; watch.Stop(); monitor?.TrackShutdown(true, watch.Elapsed, null); } catch (Exception ex) { watch.Stop(); monitor?.TrackShutdown(false, watch.Elapsed, ex); throw; } }