public virtual async Task <TMediaStreamSource> CreateMediaStreamSourceAsync(Uri source, CancellationToken cancellationToken) { Debug.WriteLine("MediaStreamFacadeBase.CreateMediaStreamSourceAsync() " + (object)source); if ((Uri)null != source && !source.IsAbsoluteUri) { throw new ArgumentException("source must be absolute: " + (object)source); } CancellationTokenSource closeCts = CancellationTokenSource.CreateLinkedTokenSource(this._disposeCancellationTokenSource.Token); if (!this._closeCancellationTokenSource.IsCancellationRequested) { this._closeCancellationTokenSource.Cancel(); } Exception exception; TMediaStreamSource mediaStreamSource; try { using (CancellationTokenSource linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, closeCts.Token)) { linkedTokenSource.CancelAfter(MediaStreamFacadeSettings.Parameters.CreateTimeout); IMediaManager mediaManager = this.MediaManager; if (null != mediaManager) { await this.StopMediaAsync(mediaManager, linkedTokenSource.Token).ConfigureAwait(false); } this._closeCancellationTokenSource.Dispose(); this._closeCancellationTokenSource = closeCts; if ((Uri)null == source) { mediaStreamSource = default(TMediaStreamSource); goto label_21; } else { IMediaManager mediaManager1 = this.MediaManager; if (mediaManager1 == null) { mediaManager1 = await this.CreateMediaManagerAsync(linkedTokenSource.Token).ConfigureAwait(false); } mediaManager = mediaManager1; IMediaStreamConfigurator configurator = await mediaManager.OpenMediaAsync((ICollection <Uri>) new Uri[1] { source }, linkedTokenSource.Token).ConfigureAwait(false); TMediaStreamSource mss = await configurator.CreateMediaStreamSourceAsync <TMediaStreamSource>(linkedTokenSource.Token).ConfigureAwait(false); mediaStreamSource = mss; goto label_21; } } } catch (OperationCanceledException ex) { exception = (Exception)ex; } catch (Exception ex) { Debug.WriteLine("MediaStreamFacadeBase.CreateAsync() failed: " + ExceptionExtensions.ExtendedMessage(ex)); exception = (Exception) new AggregateException(ex.Message, ex); } await this.CloseAsync().ConfigureAwait(false); throw exception; label_21: return(mediaStreamSource); }