public async void Test_NotDisposeAfterActionMore() { var vcs1 = new CancellationTokenSource(); var container = vcs1.NewContainer("vcs1") .SetDiposeAfterAction(false); container.AddSource("cs1"); container.AddSource("cs2"); container.AddSecondsTimeOut(1, "timeout1"); try { await CancellationContainer.Delay(-1, container); } catch (Exception ex) { Assert.True(ex is OperationCanceledException); } container["cs1"].Source.Cancel(); container["cs2"].Source.Cancel(); Assert.Equal(3, container.CanceledItems.Count); Assert.NotEmpty(container.Items); Assert.True(container["timeout1"].Token.IsCancellationRequested); container.Dispose(); }
public async void Cointainer_WithSecondsTimeOut() { using var container = new CancellationContainer(); container.AddSource("cts1"); container.AddSecondsTimeOut(2, "timeout"); _ = Task.Run(async() => { await Task.Delay(TimeSpan.FromSeconds(5), container.Token); if (!container["timeout"].Token.IsCancellationRequested) { container["cts1"].Source.Cancel(); } }, container.Token); try { await Task.Delay(-1, container.Token); AssertSomethingWentWrong(); } catch (Exception ex) { Assert.True(ex is OperationCanceledException); } Assert.True(container["timeout"].Token.IsCancellationRequested); }
public async Task <bool> WaitAsync(CancellationContainer cancellationContainer) { try { return(await WaitAsync(cancellationContainer.Token).ConfigureAwait(false)); } finally { cancellationContainer.DisposeAfterAction(); } }
public static async Task Delay(TimeSpan delay, CancellationContainer cancellationContainer) { try { await Task.Delay(delay, cancellationContainer.Token).ConfigureAwait(false); } finally { cancellationContainer.DisposeAfterAction(); } }
public async void Test_DisposeAfterAction() { var vcs1 = new CancellationTokenSource(); var container = vcs1.NewContainer("vcs1"); container.AddSource("cs1"); container.AddSource("cs2"); container.AddSecondsTimeOut(1, "timeout1"); try { await CancellationContainer.Delay(-1, container); } catch (Exception ex) { Assert.True(ex is OperationCanceledException); } Assert.Empty(container.Items); }
public static Task WaitUntil(CancellationContainer cancellationContainer) => Delay(-1, cancellationContainer);
public static Task WaitUntil(int millisecondsDelay, CancellationContainer cancellationContainer) => Delay(millisecondsDelay, cancellationContainer);
public static Task WaitUntil(TimeSpan delay, CancellationContainer cancellationContainer) => Delay(delay, cancellationContainer);
public static Task Delay(int millisecondsDelay, CancellationContainer cancellationContainer) => Delay(TimeSpan.FromMilliseconds(millisecondsDelay), cancellationContainer);