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); }
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>(); }
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()); }
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()); }
static RSession() { CanceledBeginInteractionTask = TaskUtilities.CreateCanceled <IRSessionInteraction>(new RHostDisconnectedException()); }