Пример #1
0
        async Task <IMediaStreamConfiguration> IMediaStreamControl.OpenAsync(CancellationToken cancellationToken)
        {
            if (null == this._mediaStreamSource)
            {
                throw new InvalidOperationException("MediaStreamSource has not been created");
            }
            IMediaManager mediaManager = this.MediaManager;

            if (null == mediaManager)
            {
                throw new InvalidOperationException("MediaManager has not been initialized");
            }
            TaskCompletionSource <IMediaStreamConfiguration> openCompletionSource = this._openCompletionSource;
            Action cancellationAction = (Action)(() =>
            {
                Task task = mediaManager.CloseMediaAsync();
                TaskCollector.Default.Add(task, "MediaSteamConfigurator.OpenAsync mediaManager.CloseMediaAsync");
                openCompletionSource.TrySetCanceled();
            });

            using (cancellationToken.Register(cancellationAction))
            {
                Task timeoutTask = TaskEx.Delay(MediaStreamConfigurator.OpenTimeout, cancellationToken);
                Task task        = await TaskEx.WhenAny((Task)this._openCompletionSource.Task, timeoutTask).ConfigureAwait(false);
            }
            if (!this._openCompletionSource.Task.IsCompleted)
            {
                cancellationAction();
            }
            return(await this._openCompletionSource.Task.ConfigureAwait(false));
        }