public async Task ValueAsyncDisposal() { var john = AsyncDisposableTestPerson.CreateJohn(); var options = new ActiveExpressionOptions(); options.AddConstructedTypeDisposal(typeof(AsyncDisposableTestPerson)); AsyncDisposableTestPerson?first, second; var disposedTcs = new TaskCompletionSource <object?>(); using (var expr = ActiveExpression.Create(() => new AsyncDisposableTestPerson(john.Name !.Length.ToString()), options)) { Assert.IsNull(expr.Fault); first = expr.Value; Assert.IsFalse(first !.IsDisposed); first.Disposed += (sender, e) => disposedTcs.SetResult(null); john.Name = string.Empty; await Task.WhenAny(disposedTcs.Task, Task.Delay(TimeSpan.FromSeconds(1))); Assert.IsNull(expr.Fault); second = expr.Value; Assert.IsFalse(second !.IsDisposed); Assert.IsTrue(first.IsDisposed); disposedTcs = new TaskCompletionSource <object?>(); second.Disposed += (sender, e) => disposedTcs.SetResult(null); } await Task.WhenAny(disposedTcs.Task, Task.Delay(TimeSpan.FromSeconds(1))); Assert.IsTrue(second.IsDisposed); }
public void ValueAsyncDisposal() { var john = AsyncDisposableTestPerson.CreateJohn(); var options = new ActiveExpressionOptions(); options.AddConstructedTypeDisposal(typeof(AsyncDisposableTestPerson)); AsyncDisposableTestPerson first, second; using (var expr = ActiveExpression.Create(() => new AsyncDisposableTestPerson(john.Name.Length.ToString()), options)) { Assert.IsNull(expr.Fault); first = expr.Value; Assert.IsFalse(first.IsDisposed); john.Name = string.Empty; Assert.IsNull(expr.Fault); second = expr.Value; Assert.IsFalse(second.IsDisposed); Assert.IsTrue(first.IsDisposed); } Assert.IsTrue(second.IsDisposed); }