public void CancelEven() { var bal = new BinaryAsyncLock(true); var cts = new CancellationTokenSource(); var task1 = bal.ResetAsync(); var task2 = bal.ResetAsync(cts.Token); var task3 = bal.ResetAsync(cts.Token); var task4 = bal.WaitAsync(); var task5 = bal.WaitAsync(cts.Token); task1.Should().BeRanToCompletion(); task2.Should().NotBeCompleted(); task3.Should().NotBeCompleted(); task4.Should().NotBeCompleted(); task5.Should().NotBeCompleted(); cts.Cancel(); task1.Should().BeRanToCompletion(); task2.Should().BeCanceled(); task3.Should().BeCanceled(); task4.Should().NotBeCompleted(); task5.Should().BeCanceled(); task1.Result.Reset(); task1.Should().BeRanToCompletion(); task2.Should().BeCanceled(); task3.Should().BeCanceled(); task4.Should().BeRanToCompletion(); task5.Should().BeCanceled(); bal.IsSet.Should().BeFalse(); }
public void SequentalWaitReset_SetToken() { var bal = new BinaryAsyncLock(true); var task1 = bal.ResetAsync(); var task2 = bal.WaitAsync(); var task3 = bal.ResetAsync(); var task4 = bal.WaitAsync(); var task5 = bal.ResetAsync(); task1.Should().BeRanToCompletion(); task2.Should().NotBeCompleted(); task3.Should().NotBeCompleted(); task4.Should().NotBeCompleted(); task5.Should().NotBeCompleted(); bal.IsSet.Should().BeFalse(); task1.Result.Set(); task1.Should().BeRanToCompletion(); task2.Should().BeRanToCompletion(); task3.Should().BeRanToCompletion(); task4.Should().NotBeCompleted(); task5.Should().NotBeCompleted(); bal.IsSet.Should().BeFalse(); task3.Result.Set(); task1.Should().BeRanToCompletion(); task2.Should().BeRanToCompletion(); task3.Should().BeRanToCompletion(); task4.Should().BeRanToCompletion(); task5.Should().BeRanToCompletion(); bal.IsSet.Should().BeFalse(); }
public RPackageManagerViewModel(IRPackageManager packageManager, ICoreShell coreShell) { _packageManager = packageManager; _coreShell = coreShell; _availableAndInstalledLock = new BinaryAsyncLock(); _items = new BatchObservableCollection <object>(); Items = new ReadOnlyObservableCollection <object>(_items); }
public void WaitAsync_ResetAsync() { var bal = new BinaryAsyncLock(); var task1 = bal.WaitAsync(); var task2 = bal.ResetAsync(); task1.Should().BeRanToCompletion(); task2.Should().NotBeCompleted(); bal.IsSet.Should().BeFalse(); }
public void CancelResetAsync_Set() { var bal = new BinaryAsyncLock(true); var cts = new CancellationTokenSource(); var tasks = Enumerable.Range(0, 4).Select(i => bal.ResetAsync(cts.Token)).ToList(); tasks.Should().ContainSingle(t => t.IsCompleted); cts.Cancel(); tasks.Should().OnlyContain(t => t.IsCompleted); }
public void CancelWaitAsync_Set() { var bal = new BinaryAsyncLock(true); var cts = new CancellationTokenSource(); var tasks = Enumerable.Range(0, 4).Select(i => bal.WaitAsync(cts.Token)).ToList(); tasks.Should().OnlyContain(t => t.Status == TaskStatus.RanToCompletion); cts.Cancel(); tasks.Should().OnlyContain(t => t.Status == TaskStatus.RanToCompletion); }
public void ResetAsync_WaitAsync_SetIfLast() { var bal = new BinaryAsyncLock(); var task1 = bal.ResetAsync(); var task2 = bal.WaitAsync(); task1.Result.SetIfLast(); task1.Should().BeRanToCompletion(); task2.Should().BeRanToCompletion(); bal.IsSet.Should().BeFalse(); }
public void ResetAsync_ResetAsyncCanceled_WaitAsync() { var bal = new BinaryAsyncLock(true); var cts = new CancellationTokenSource(); cts.Cancel(); var task1 = bal.ResetAsync(cts.Token); var task2 = bal.WaitAsync(); task1.Should().BeCanceled(); task2.Should().BeRanToCompletion(); bal.IsSet.Should().BeTrue(); }
public void ResetAsync_ResetAsync_Set_Set() { var bal = new BinaryAsyncLock(); var task1 = bal.ResetAsync(); var task2 = bal.ResetAsync(); task1.Result.Set(); task2.Result.Set(); task1.Should().BeRanToCompletion(); task2.Should().BeRanToCompletion(); bal.IsSet.Should().BeTrue(); }
public async Task WaitAsync_SetInCtor() { var bal = new BinaryAsyncLock(true); var count = 0; await ParallelTools.InvokeAsync(4, async i => { await bal.WaitAsync(); if (!bal.IsSet) { await Task.Delay(50); Interlocked.Increment(ref count); } }); count.Should().Be(0); }
public async Task Release() { var bal = new BinaryAsyncLock(); var count = 0; await ParallelTools.InvokeAsync(4, async i => { var isSet = await bal.WaitAsync(); if (!isSet) { Interlocked.Increment(ref count); bal.Release(); } }); count.Should().Be(1); }
public async Task WaitAsync_Reset() { var bal = new BinaryAsyncLock(); var count = 0; await ParallelTools.InvokeAsync(4, async i => { var token = await bal.WaitAsync(); if (!bal.IsSet) { await Task.Delay(50); Interlocked.Increment(ref count); token.Reset(); } }); count.Should().Be(4); }
public RPackageManagerViewModel(IRPackageManager packageManager, IRSession session, IRSettings settings, ICoreShell coreShell) { _packageManager = packageManager; _session = session; _settings = settings; _coreShell = coreShell; _selectedTab = SelectedTab.None; _availablePackages = new List <IRPackageViewModel>(); _installedPackages = new List <IRPackageViewModel>(); _loadedPackages = new List <IRPackageViewModel>(); _availableLock = new BinaryAsyncLock(); _installedAndLoadedLock = new BinaryAsyncLock(); _items = new BatchObservableCollection <object>(); _errorMessages = new Queue <string>(); Items = new ReadOnlyObservableCollection <object>(_items); _session.Mutated += RSessionMutated; }
public RPackageManagerViewModel(IRPackageManager packageManager, IRSettings settings, ICoreShell coreShell) { _packageManager = packageManager; _settings = settings; _coreShell = coreShell; _selectedTab = Tab.None; _availablePackages = new List <IRPackageViewModel>(); _installedPackages = new List <IRPackageViewModel>(); _loadedPackages = new List <IRPackageViewModel>(); _availableLock = new BinaryAsyncLock(); _installedAndLoadedLock = new BinaryAsyncLock(); _items = new BatchObservableCollection <object>(); _errorMessages = new ErrorMessageCollection(this); Items = new ReadOnlyObservableCollection <object>(_items); _packageManager.AvailablePackagesInvalidated += AvailablePackagesInvalidated; _packageManager.InstalledPackagesInvalidated += InstalledPackagesInvalidated; _packageManager.LoadedPackagesInvalidated += LoadedPackagesInvalidated; }
public async Task Reset() { var bal = new BinaryAsyncLock(); var count = 0; await ParallelTools.InvokeAsync(4, async i => { try { var isSet = await bal.WaitAsync(); if (!isSet) { await Task.Delay(50); bal.Reset(); } } catch (OperationCanceledException) { Interlocked.Increment(ref count); } }); count.Should().Be(3); }
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()); }
public void ResetIfNotWaiting_ResetAsync_Skip_WaitAsync_Set() { var bal = new BinaryAsyncLock(); var task = bal.ResetAsync(); task.Should().BeRanToCompletion(); bal.IsSet.Should().BeFalse(); task.Result.Reset(); bal.IsSet.Should().BeFalse(); task = bal.WaitAsync(); task.Should().BeRanToCompletion(); bal.IsSet.Should().BeFalse(); task.Result.Set(); bal.IsSet.Should().BeTrue(); }
public RPackageManagerViewModel(IRPackageManager packageManager, IServiceContainer services) { _packageManager = packageManager; _services = services; _settings = services.GetService <IRSettings>(); _mainThread = services.MainThread(); _selectedTab = Tab.None; _availablePackages = new List <IRPackageViewModel>(); _installedPackages = new List <IRPackageViewModel>(); _loadedPackages = new List <IRPackageViewModel>(); _availableLock = new BinaryAsyncLock(); _installedAndLoadedLock = new BinaryAsyncLock(); _items = new BatchObservableCollection <object>(); _errorMessages = new ErrorMessageCollection(this); Items = new ReadOnlyObservableCollection <object>(_items); _packageManager.AvailablePackagesInvalidated += AvailablePackagesInvalidated; _packageManager.InstalledPackagesInvalidated += InstalledPackagesInvalidated; _packageManager.LoadedPackagesInvalidated += LoadedPackagesInvalidated; }
public RSession(int id, string name, IBrokerClient brokerClient, IExclusiveReaderLock initializationLock, Action onDispose) { Id = id; Name = name; BrokerClient = brokerClient; _onDispose = onDispose; _disposeToken = DisposeToken.Create <RSession>(); _disableMutatingOnReadConsole = new CountdownDisposable(() => { if (!_delayedMutatedOnReadConsole) { return; } _delayedMutatedOnReadConsole = false; Task.Run(() => Mutated?.Invoke(this, EventArgs.Empty)); }); _initializationLock = initializationLock; _stopHostLock = new BinaryAsyncLock(true); _hostStartedTcs = new TaskCompletionSourceEx <object>(); _startupInfo = new RHostStartupInfo(); }