static void CancelAndWait(CancellationTokenSource source, IMessageQueueFactory messageFactory, params Task[] tasks) { source.Cancel(); Task.WaitAll(tasks); InfrastructureFactory.ForceLogFlush(); InfrastructureFactory.CloseLogTargets(); if (messageFactory != null) { if (messageFactory.IsOpen) { messageFactory.Dispose(); } } }