Ejemplo n.º 1
0
        public A GetResult()
        {
            var result = awaiter.GetResult();

            return(result.IsSucc
                ? result.Value
                : throw new AffException(result.Error));
        }
        public void ReadAsyncCompletedAfterPreCancellation()
        {
            Reader.CancelPendingRead();
            Write(new byte[] { 1, 2, 3 });

            ValueTaskAwaiter <ReadResult> awaitable = Reader.ReadAsync().GetAwaiter();

            Assert.True(awaitable.IsCompleted);

            ReadResult result = awaitable.GetResult();

            Assert.True(result.IsCanceled);

            awaitable = Reader.ReadAsync().GetAwaiter();

            Assert.True(awaitable.IsCompleted);

            Reader.AdvanceTo(awaitable.GetResult().Buffer.End);
        }
 void ContinuationWithCapture(ValueTaskAwaiter awaiter)
 {
     try
     {
         awaiter.GetResult();
     }
     catch (Exception ex)
     {
         exception = ExceptionDispatchInfo.Capture(ex);
         TryInvokeContinuation();
         return;
     }
     TryInvokeContinuationWithIncrement();
 }
        public void ReadAsyncReturnsIsCancelOnCancelPendingReadBeforeGetResult()
        {
            ValueTaskAwaiter <ReadResult> awaitable = Pipe.Reader.ReadAsync().GetAwaiter();

            Assert.False(awaitable.IsCompleted);
            awaitable.OnCompleted(() => { });

            Pipe.Writer.WriteAsync(new byte[] { });
            Pipe.Reader.CancelPendingRead();

            Assert.True(awaitable.IsCompleted);

            ReadResult result = awaitable.GetResult();

            Assert.True(result.IsCanceled);
        }
 void RegisterContinuation(ValueTaskAwaiter awaiter, int index)
 {
     awaiter.UnsafeOnCompleted(() =>
     {
         try
         {
             awaiter.GetResult();
         }
         catch (Exception ex)
         {
             exception = ExceptionDispatchInfo.Capture(ex);
             TryInvokeContinuation();
             return;
         }
         TryInvokeContinuationWithIncrement();
     });
 }
Ejemplo n.º 6
0
        public void FlushAsyncReturnsIsCancelOnCancelPendingFlushBeforeGetResult()
        {
            PipeWriter writableBuffer = Pipe.Writer.WriteEmpty(MaximumSizeHigh);
            ValueTaskAwaiter <FlushResult> awaitable = writableBuffer.FlushAsync().GetAwaiter();

            Assert.False(awaitable.IsCompleted);
            awaitable.OnCompleted(() => { });

            Pipe.Reader.AdvanceTo(Pipe.Reader.ReadAsync().GetAwaiter().GetResult().Buffer.End);
            Pipe.Writer.CancelPendingFlush();

            Assert.True(awaitable.IsCompleted);

            FlushResult result = awaitable.GetResult();

            Assert.True(result.IsCanceled);
        }
Ejemplo n.º 7
0
        public void ValueTask_GetResultWhenNotCompleted_Throws()
        {
            ValueTaskAwaiter <int> readVt = CreateChannel().Reader.ReadAsync().GetAwaiter();

            Assert.Throws <InvalidOperationException>(() => readVt.GetResult());

            ValueTaskAwaiter <bool> waitReadVt = CreateChannel().Reader.WaitToReadAsync().GetAwaiter();

            Assert.Throws <InvalidOperationException>(() => waitReadVt.GetResult());

            if (CreateFullChannel() != null)
            {
                ValueTaskAwaiter writeVt = CreateFullChannel().Writer.WriteAsync(42).GetAwaiter();
                Assert.Throws <InvalidOperationException>(() => writeVt.GetResult());

                ValueTaskAwaiter <bool> waitWriteVt = CreateFullChannel().Writer.WaitToWriteAsync().GetAwaiter();
                Assert.Throws <InvalidOperationException>(() => waitWriteVt.GetResult());
            }
        }
        public void GetResultThrowsIfReadAsyncCanceledBeforeOnCompleted()
        {
            var onCompletedCalled       = false;
            var cancellationTokenSource = new CancellationTokenSource();

            ValueTaskAwaiter <ReadResult> awaiter = Pipe.Reader.ReadAsync(cancellationTokenSource.Token).GetAwaiter();
            bool awaiterIsCompleted = awaiter.IsCompleted;

            cancellationTokenSource.Cancel();

            awaiter.OnCompleted(
                () => {
                onCompletedCalled = true;
                Assert.Throws <OperationCanceledException>(() => awaiter.GetResult());
            });

            Assert.False(awaiterIsCompleted);
            Assert.True(onCompletedCalled);
        }
Ejemplo n.º 9
0
        public void GetResultThrowsIfFlushAsyncCanceledBeforeOnCompleted()
        {
            var        onCompletedCalled       = false;
            var        cancellationTokenSource = new CancellationTokenSource();
            PipeWriter buffer = Pipe.Writer.WriteEmpty(MaximumSizeHigh);

            ValueTaskAwaiter <FlushResult> awaiter = buffer.FlushAsync(cancellationTokenSource.Token).GetAwaiter();
            bool awaiterIsCompleted = awaiter.IsCompleted;

            cancellationTokenSource.Cancel();

            awaiter.OnCompleted(
                () => {
                onCompletedCalled = true;
                Assert.Throws <OperationCanceledException>(() => awaiter.GetResult());
            });

            Assert.False(awaiterIsCompleted);
            Assert.True(onCompletedCalled);
        }
        public void ReadAsyncNotCompletedAfterCancellationTokenCanceled()
        {
            var onCompletedCalled = false;
            var cts = new CancellationTokenSource();
            ValueTaskAwaiter <ReadResult> awaitable = Pipe.Reader.ReadAsync(cts.Token).GetAwaiter();

            Assert.False(awaitable.IsCompleted);
            awaitable.OnCompleted(
                () => {
                onCompletedCalled = true;
                Assert.True(awaitable.IsCompleted);

                Assert.Throws <OperationCanceledException>(() => awaitable.GetResult());

                awaitable = Pipe.Reader.ReadAsync().GetAwaiter();
                Assert.False(awaitable.IsCompleted);
            });

            cts.Cancel();
            Assert.True(onCompletedCalled);
        }
        public void ReadAsyncNotCompletedAfterCancellation()
        {
            var onCompletedCalled = false;
            ValueTaskAwaiter <ReadResult> awaitable = Pipe.Reader.ReadAsync().GetAwaiter();

            Assert.False(awaitable.IsCompleted);
            awaitable.OnCompleted(
                () => {
                onCompletedCalled = true;
                Assert.True(awaitable.IsCompleted);

                ReadResult readResult = awaitable.GetResult();
                Assert.True(readResult.IsCanceled);

                awaitable = Pipe.Reader.ReadAsync().GetAwaiter();
                Assert.False(awaitable.IsCompleted);
            });

            Pipe.Reader.CancelPendingRead();
            Assert.True(onCompletedCalled);
        }
Ejemplo n.º 12
0
        public async Task ReadAsyncReturnsDataAfterItWasWrittenDuringCancelledRead()
        {
            ValueTask <ReadResult>        readTask = Pipe.Reader.ReadAsync();
            ValueTaskAwaiter <ReadResult> awaiter  = readTask.GetAwaiter();
            ReadResult result = default;

            awaiter.OnCompleted(
                () =>
            {
                Pipe.Writer.WriteAsync(new byte[] { 1 }).AsTask().Wait();
                result = awaiter.GetResult();
            });

            Pipe.Reader.CancelPendingRead();

            Assert.True(result.IsCanceled);

            result = await Pipe.Reader.ReadAsync();

            Assert.False(result.IsCanceled);
            Assert.Equal(new byte[] { 1 }, result.Buffer.ToArray());
        }
Ejemplo n.º 13
0
        public void FlushAsyncNotCompletedAfterCancellationTokenCanceled()
        {
            var        onCompletedCalled = false;
            var        cts            = new CancellationTokenSource();
            PipeWriter writableBuffer = Pipe.Writer.WriteEmpty(MaximumSizeHigh);

            ValueTaskAwaiter <FlushResult> awaitable = writableBuffer.FlushAsync(cts.Token).GetAwaiter();

            Assert.False(awaitable.IsCompleted);
            awaitable.OnCompleted(
                () => {
                onCompletedCalled = true;
                Assert.True(awaitable.IsCompleted);

                Assert.Throws <OperationCanceledException>(() => awaitable.GetResult());

                awaitable = writableBuffer.FlushAsync().GetAwaiter();
                Assert.False(awaitable.IsCompleted);
            });

            cts.Cancel();
            Assert.True(onCompletedCalled);
        }
Ejemplo n.º 14
0
        public void FlushAsyncNotCompletedAfterCancellation()
        {
            var        onCompletedCalled = false;
            PipeWriter writableBuffer    = Pipe.Writer.WriteEmpty(MaximumSizeHigh);

            ValueTaskAwaiter <FlushResult> awaitable = writableBuffer.FlushAsync().GetAwaiter();

            Assert.False(awaitable.IsCompleted);
            awaitable.OnCompleted(
                () => {
                onCompletedCalled = true;
                Assert.True(awaitable.IsCompleted);

                FlushResult flushResult = awaitable.GetResult();

                Assert.True(flushResult.IsCanceled);

                awaitable = writableBuffer.FlushAsync().GetAwaiter();
                Assert.False(awaitable.IsCompleted);
            });

            Pipe.Writer.CancelPendingFlush();
            Assert.True(onCompletedCalled);
        }