コード例 #1
0
        public void ReadEnsuresEndOfStreamIsReachable()
        {
            // BizTalk Factory's EventingReadStream will eventually set ReadCompleted to true, AfterLastReadEvent will be fired as well
            var tempBuffer = new byte[1024];

            using (var stream = new EventingReadStream(new MemoryStream(_content)))
            {
                var edgeEventsCount = 0;
                stream.AfterLastReadEvent += (sender, args) => ++ edgeEventsCount;
                while (stream.Read(tempBuffer, 0, tempBuffer.Length) == tempBuffer.Length)
                {
                }
                Assert.That(stream.ReadCompleted);
                Assert.That(edgeEventsCount, Is.EqualTo(1));
            }

            // while MicrosoftEventingReadStream will not always set ReadCompleted to true, AfterLastReadEvent won't be fired either
            using (var stream = new MicrosoftEventingReadStream())
            {
                var edgeEventsCount = 0;
                stream.AfterLastReadEvent += (sender, args) => ++ edgeEventsCount;
                while (stream.Read(tempBuffer, 0, tempBuffer.Length) == tempBuffer.Length)
                {
                }
                Assert.That(stream.ReadCompleted, Is.False);
                Assert.That(edgeEventsCount, Is.EqualTo(0));
            }
        }
コード例 #2
0
        public void ReadEnsuresEndOfStreamIsReachable()
        {
            // BizTalk Factory's EventingReadStream will eventually set ReadCompleted to true, AfterLastReadEvent will be fired as well
            var tempBuffer = new byte[1024];

            using (var stream = new EventingReadStream(new MemoryStream(_content)))
            {
                var edgeEventsCount = 0;
                stream.AfterLastReadEvent += (_, _) => ++ edgeEventsCount;
                while (stream.Read(tempBuffer, 0, tempBuffer.Length) == tempBuffer.Length)
                {
                }
                stream.ReadCompleted.Should().BeTrue();
                edgeEventsCount.Should().Be(1);
            }

            // while MicrosoftEventingReadStream will not always set ReadCompleted to true, AfterLastReadEvent won't be fired either
            using (var stream = new MicrosoftEventingReadStream())
            {
                var edgeEventsCount = 0;
                stream.AfterLastReadEvent += (_, _) => ++ edgeEventsCount;
                while (stream.Read(tempBuffer, 0, tempBuffer.Length) == tempBuffer.Length)
                {
                }
                stream.ReadCompleted.Should().BeFalse();
                edgeEventsCount.Should().Be(0);
            }
        }