Esempio n. 1
0
        private Task BlockUntilCompletedImpl(Func <Task> func)
        {
            if (UIThreadHelper.Instance.Thread != Thread.CurrentThread)
            {
                try {
                    var task = func();
                    task.GetAwaiter().GetResult();
                    return(task);
                } catch (OperationCanceledException ex) {
                    return(TaskUtilities.CreateCanceled(ex));
                } catch (Exception ex) {
                    return(Task.FromException(ex));
                }
            }

            var sc = SynchronizationContext.Current;
            var blockingLoopSynchronizationContext = new BlockingLoopSynchronizationContext(UIThreadHelper.Instance, sc);

            SynchronizationContext.SetSynchronizationContext(blockingLoopSynchronizationContext);
            var bl = new BlockingLoop(func, sc);

            try {
                _blockingLoop.Value = bl;
                bl.Start();
            } finally {
                _blockingLoop.Value = null;
                SynchronizationContext.SetSynchronizationContext(sc);
            }

            return(bl.Task);
        }
Esempio n. 2
0
        public async Task CreateCanceled()
        {
            var exception = new CustomOperationCanceledException();
            var task      = TaskUtilities.CreateCanceled <int>(exception);

            task.Status.Should().Be(TaskStatus.Canceled);
            task.IsCanceled.Should().Be(true);

            Func <Task <int> > f = async() => await task;
            await f.ShouldThrowAsync <CustomOperationCanceledException>();
        }
Esempio n. 3
0
        public RSession(int id, IRHostBrokerConnector brokerConnector, Action onDispose)
        {
            Id = id;
            BrokerConnector = brokerConnector;
            _onDispose      = onDispose;
            _disposeToken   = DisposeToken.Create <RSession>();
            _disableMutatingOnReadConsole = new CountdownDisposable(() => {
                if (!_delayedMutatedOnReadConsole)
                {
                    return;
                }

                _delayedMutatedOnReadConsole = false;
                Task.Run(() => Mutated?.Invoke(this, EventArgs.Empty));
            });

            _afterHostStartedTask = TaskUtilities.CreateCanceled(new RHostDisconnectedException());
        }
Esempio n. 4
0
        public RSession(int id, IBrokerClient brokerClient, Action onDispose)
        {
            Id            = id;
            BrokerClient  = brokerClient;
            _onDispose    = onDispose;
            _disposeToken = DisposeToken.Create <RSession>();
            _disableMutatingOnReadConsole = new CountdownDisposable(() => {
                if (!_delayedMutatedOnReadConsole)
                {
                    return;
                }

                _delayedMutatedOnReadConsole = false;
                Task.Run(() => Mutated?.Invoke(this, EventArgs.Empty));
            });

            _initializationLock   = new BinaryAsyncLock();
            _initializationTcs    = new TaskCompletionSourceEx <object>();
            _afterHostStartedTask = TaskUtilities.CreateCanceled(new RHostDisconnectedException());
        }
Esempio n. 5
0
 static RSession()
 {
     CanceledBeginInteractionTask = TaskUtilities.CreateCanceled <IRSessionInteraction>(new RHostDisconnectedException());
 }