コード例 #1
0
        public async Task WriteRandom()
        {
            var    isAborted    = false;
            Action abortRequest = () => isAborted = true;

            using (var ms1 = new MemoryStream())
            {
                using (var ms2 = new MemoryStream())
                {
                    using (var writeOnlyStream = new WriteOnlyResponseStream(abortRequest))
                    {
                        var random = new Random();
                        for (var i = 0; i < 10; i++)
                        {
                            var buffer = ArrayPool <byte> .Shared.Rent(random.Next(50000));

                            random.NextBytes(buffer);
                            await writeOnlyStream.WriteAsync(buffer, 0, buffer.Length).ConfigureAwait(false);

                            await ms1.WriteAsync(buffer, 0, buffer.Length).ConfigureAwait(false);

                            ArrayPool <byte> .Shared.Return(buffer);
                        }

                        await writeOnlyStream.CopyToAsync(ms2).ConfigureAwait(false);

                        ms1.Position = 0;
                        ms2.Position = 0;
                        CompareStreams(ms1, ms2);
                    }
                }
            }

            Assert.True(isAborted);
        }
コード例 #2
0
        private async Task <byte[]> GetBuffer(WriteOnlyResponseStream writeOnlyStream)
        {
            using (var ms = new MemoryStream())
            {
                await writeOnlyStream.CopyToAsync(ms).ConfigureAwait(false);

                return(ms.ToArray());
            }
        }
コード例 #3
0
        public void IsAborted()
        {
            var    isAborted    = false;
            Action abortRequest = () => isAborted = true;

            using (var writeOnlyStream = new WriteOnlyResponseStream(abortRequest))
            {
                writeOnlyStream.WriteByte(0);
            }

            Assert.True(isAborted);
        }
コード例 #4
0
        public async Task WriteSync()
        {
            var    isAborted    = false;
            Action abortRequest = () => isAborted = true;

            using (var writeOnlyStream = new WriteOnlyResponseStream(abortRequest))
            {
                var buffer = new byte[] { 1, 2, 3, 4, 5 };
                writeOnlyStream.Write(buffer, 0, buffer.Length);
                var writtenBuffer = await GetBuffer(writeOnlyStream).ConfigureAwait(false);

                Assert.Equal(buffer, writtenBuffer);
            }

            Assert.True(isAborted);
        }
コード例 #5
0
        public async Task BeginEndWrite()
        {
            var    isAborted    = false;
            Action abortRequest = () => isAborted = true;

            using (var writeOnlyStream = new WriteOnlyResponseStream(abortRequest))
            {
                var buffer = new byte[] { 1, 2, 3, 4, 5 };
                var iar    = writeOnlyStream.BeginWrite(buffer, 0, buffer.Length, null, null);
                var task   = Task.Factory.FromAsync(iar, writeOnlyStream.EndWrite);
                await task.ConfigureAwait(false);

                var writtenBuffer = await GetBuffer(writeOnlyStream).ConfigureAwait(false);

                Assert.Equal(buffer, writtenBuffer);
            }

            Assert.True(isAborted);
        }