static bool AsyncWriteTest(MemoryStream ms, Encoding encoding, MyStreamProvider myStreamProvider) { XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(ms); writer.WriteStartElement("Root"); Task writeValueAsynctask = writer.WriteValueAsync(myStreamProvider); writeValueAsynctask.Wait(); Assert.True(myStreamProvider.StreamReleased, "Error, stream not released."); writer.WriteEndElement(); writer.Flush(); return true; }
internal SerializeAsyncResult(StreamFormatter streamFormatter, XmlDictionaryWriter writer, object[] parameters, object returnValue, AsyncCallback callback, object state) : base(callback, state) { this.streamFormatter = streamFormatter; this.writer = writer; bool completeSelf = true; Stream streamValue = streamFormatter.GetStreamAndWriteStartWrapperIfNecessary(writer, parameters, returnValue); IAsyncResult result = writer.WriteValueAsync(new OperationStreamProvider(streamValue)).AsAsyncResult(PrepareAsyncCompletion(handleEndSerialize), this); completeSelf = SyncContinue(result); // Note: The current task implementation hard codes the "IAsyncResult.CompletedSynchronously" property to false, so this fast path will never // be hit, and we will always hop threads. CSDMain #210220 if (completeSelf) { Complete(true); } }
static bool AsyncWriteTest(MemoryStream ms, Encoding encoding, MyStreamProvider myStreamProvider) { XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(ms); writer.WriteStartElement("Root"); Task writeValueAsynctask = writer.WriteValueAsync(myStreamProvider); writeValueAsynctask.Wait(); if (myStreamProvider.StreamReleased) { Console.WriteLine("Ok, stream released right after AsyncWriteValue"); } else { Console.WriteLine("Error, stream not released after AsyncWriteValue"); return(false); } writer.WriteEndElement(); writer.Flush(); return(true); }