public void WriteToStreamUsingBackgroundThread_WriteToClosedTransferStream() { var buffer = Encoding.UTF8.GetBytes(Message); using(var targetStream = new MemoryStream()) { var transferStream = new TransferStream(targetStream); // 실제 targetStream에 쓰는 작업이 아니라 쓰기를 예약한 것입니다. // for(int i = 0; i < TestCount; i++) { // 쓰기 요청은 했지만 실제로 targetStream에 쓰여지는 작업는 비동기적으로 수행되므로 아직 쓰여지지 않았다. Assert.AreNotEqual(buffer.Length * TestCount, (int)targetStream.Length); transferStream.Write(buffer, 0, buffer.Length); } // 이 때에 모든 쓰기가 완료될 것이고, 대상 Stream에 완전히 복사가 됩니다. transferStream.Close(); // 여기서 예외가 발생해야 한다??? 아니다. close 가 되면 쓰기를 취소하고 그냥 반환한다. // transferStream.Write(buffer, 0, buffer.Length); Assert.AreEqual(buffer.Length * TestCount, (int)targetStream.Length); targetStream.ToText(Encoding.UTF8).Contains(Message).Should().Be.True(); } }
public void WriteToStreamUsingBackgroundThread_WriteToClosedTransferStream() { var buffer = Encoding.UTF8.GetBytes(Message); using (var targetStream = new MemoryStream()) { var transferStream = new TransferStream(targetStream); // 실제 targetStream에 쓰는 작업이 아니라 쓰기를 예약한 것입니다. // for (int i = 0; i < TestCount; i++) { // 쓰기 요청은 했지만 실제로 targetStream에 쓰여지는 작업는 비동기적으로 수행되므로 아직 쓰여지지 않았다. Assert.AreNotEqual(buffer.Length * TestCount, (int)targetStream.Length); transferStream.Write(buffer, 0, buffer.Length); } // 이 때에 모든 쓰기가 완료될 것이고, 대상 Stream에 완전히 복사가 됩니다. transferStream.Close(); // 여기서 예외가 발생해야 한다??? 아니다. close 가 되면 쓰기를 취소하고 그냥 반환한다. // transferStream.Write(buffer, 0, buffer.Length); Assert.AreEqual(buffer.Length * TestCount, (int)targetStream.Length); targetStream.ToText(Encoding.UTF8).Contains(Message).Should().Be.True(); } }