Observable .Start(() => _channelFactory.CreateChannel()) .SelectMany(channel => Observable .Timer(TimeSpan.FromSeconds(1), Scheduler.Immediate) .Select(channel)) .SelectMany(channel => Observable .FromAsyncPattern( channel.BeginGetImage, channel.EndGetImage)(imageUri)) .Retry() .Repeat() .Subscribe(stream => UpdateImageStream(imageUri, stream));