public void Run(CancellationToken cancellationToken, params Task[] tasks) { var registration = cancellationToken.Register(() => m_poller.StopAsync(), false); Task.WhenAll(tasks).ContinueWith(t => m_poller.Stop(), cancellationToken); m_poller.Run(m_synchronizationContext); registration.Dispose(); }