コード例 #1
0
ファイル: ActiveNewExpression.cs プロジェクト: Epiforge/Cogs
        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);
        }
コード例 #2
0
        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);
        }