diff options
Diffstat (limited to 'src/mscorlib/src/System/IO/TextWriter.cs')
-rw-r--r-- | src/mscorlib/src/System/IO/TextWriter.cs | 886 |
1 files changed, 0 insertions, 886 deletions
diff --git a/src/mscorlib/src/System/IO/TextWriter.cs b/src/mscorlib/src/System/IO/TextWriter.cs deleted file mode 100644 index 131f69d35d..0000000000 --- a/src/mscorlib/src/System/IO/TextWriter.cs +++ /dev/null @@ -1,886 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Text; -using System.Threading; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Security.Permissions; -using System.Globalization; -using System.Diagnostics.CodeAnalysis; -using System.Diagnostics.Contracts; -using System.Threading.Tasks; - -namespace System.IO { - // This abstract base class represents a writer that can write a sequential - // stream of characters. A subclass must minimally implement the - // Write(char) method. - // - // This class is intended for character output, not bytes. - // There are methods on the Stream class for writing bytes. - [Serializable] - [ComVisible(true)] - public abstract class TextWriter : MarshalByRefObject, IDisposable { - public static readonly TextWriter Null = new NullTextWriter(); - - // This should be initialized to Environment.NewLine, but - // to avoid loading Environment unnecessarily so I've duplicated - // the value here. -#if !PLATFORM_UNIX - private const String InitialNewLine = "\r\n"; - - protected char[] CoreNewLine = new char[] { '\r', '\n' }; -#else - private const String InitialNewLine = "\n"; - - protected char[] CoreNewLine = new char[] {'\n'}; -#endif // !PLATFORM_UNIX - - // Can be null - if so, ask for the Thread's CurrentCulture every time. - private IFormatProvider InternalFormatProvider; - - protected TextWriter() - { - InternalFormatProvider = null; // Ask for CurrentCulture all the time. - } - - protected TextWriter(IFormatProvider formatProvider) - { - InternalFormatProvider = formatProvider; - } - - public virtual IFormatProvider FormatProvider { - get { - if (InternalFormatProvider == null) - return Thread.CurrentThread.CurrentCulture; - else - return InternalFormatProvider; - } - } - - // Closes this TextWriter and releases any system resources associated with the - // TextWriter. Following a call to Close, any operations on the TextWriter - // may raise exceptions. This default method is empty, but descendant - // classes can override the method to provide the appropriate - // functionality. - public virtual void Close() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - } - - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - // Clears all buffers for this TextWriter and causes any buffered data to be - // written to the underlying device. This default method is empty, but - // descendant classes can override the method to provide the appropriate - // functionality. - public virtual void Flush() { - } - - public abstract Encoding Encoding { - get; - } - - // Returns the line terminator string used by this TextWriter. The default line - // terminator string is a carriage return followed by a line feed ("\r\n"). - // - // Sets the line terminator string for this TextWriter. The line terminator - // string is written to the text stream whenever one of the - // WriteLine methods are called. In order for text written by - // the TextWriter to be readable by a TextReader, only one of the following line - // terminator strings should be used: "\r", "\n", or "\r\n". - // - public virtual String NewLine { - get { return new String(CoreNewLine); } - set { - if (value == null) - value = InitialNewLine; - CoreNewLine = value.ToCharArray(); - } - } - - - public static TextWriter Synchronized(TextWriter writer) { - if (writer==null) - throw new ArgumentNullException(nameof(writer)); - Contract.Ensures(Contract.Result<TextWriter>() != null); - Contract.EndContractBlock(); - - if (writer is SyncTextWriter) - return writer; - - return new SyncTextWriter(writer); - } - - // Writes a character to the text stream. This default method is empty, - // but descendant classes can override the method to provide the - // appropriate functionality. - // - public virtual void Write(char value) { - } - - // Writes a character array to the text stream. This default method calls - // Write(char) for each of the characters in the character array. - // If the character array is null, nothing is written. - // - public virtual void Write(char[] buffer) { - if (buffer != null) Write(buffer, 0, buffer.Length); - } - - // Writes a range of a character array to the text stream. This method will - // write count characters of data into this TextWriter from the - // buffer character array starting at position index. - // - public virtual void Write(char[] buffer, int index, int count) { - if (buffer==null) - throw new ArgumentNullException(nameof(buffer), Environment.GetResourceString("ArgumentNull_Buffer")); - if (index < 0) - throw new ArgumentOutOfRangeException(nameof(index), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); - if (count < 0) - throw new ArgumentOutOfRangeException(nameof(count), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); - if (buffer.Length - index < count) - throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); - Contract.EndContractBlock(); - - for (int i = 0; i < count; i++) Write(buffer[index + i]); - } - - // Writes the text representation of a boolean to the text stream. This - // method outputs either Boolean.TrueString or Boolean.FalseString. - // - public virtual void Write(bool value) { - Write(value ? Boolean.TrueLiteral : Boolean.FalseLiteral); - } - - // Writes the text representation of an integer to the text stream. The - // text representation of the given value is produced by calling the - // Int32.ToString() method. - // - public virtual void Write(int value) { - Write(value.ToString(FormatProvider)); - } - - // Writes the text representation of an integer to the text stream. The - // text representation of the given value is produced by calling the - // UInt32.ToString() method. - // - [CLSCompliant(false)] - public virtual void Write(uint value) { - Write(value.ToString(FormatProvider)); - } - - // Writes the text representation of a long to the text stream. The - // text representation of the given value is produced by calling the - // Int64.ToString() method. - // - public virtual void Write(long value) { - Write(value.ToString(FormatProvider)); - } - - // Writes the text representation of an unsigned long to the text - // stream. The text representation of the given value is produced - // by calling the UInt64.ToString() method. - // - [CLSCompliant(false)] - public virtual void Write(ulong value) { - Write(value.ToString(FormatProvider)); - } - - // Writes the text representation of a float to the text stream. The - // text representation of the given value is produced by calling the - // Float.toString(float) method. - // - public virtual void Write(float value) { - Write(value.ToString(FormatProvider)); - } - - // Writes the text representation of a double to the text stream. The - // text representation of the given value is produced by calling the - // Double.toString(double) method. - // - public virtual void Write(double value) { - Write(value.ToString(FormatProvider)); - } - - public virtual void Write(Decimal value) { - Write(value.ToString(FormatProvider)); - } - - // Writes a string to the text stream. If the given string is null, nothing - // is written to the text stream. - // - public virtual void Write(String value) { - if (value != null) Write(value.ToCharArray()); - } - - // Writes the text representation of an object to the text stream. If the - // given object is null, nothing is written to the text stream. - // Otherwise, the object's ToString method is called to produce the - // string representation, and the resulting string is then written to the - // output stream. - // - public virtual void Write(Object value) { - if (value != null) { - IFormattable f = value as IFormattable; - if (f != null) - Write(f.ToString(null, FormatProvider)); - else - Write(value.ToString()); - } - } - -#if false - // // Converts the wchar * to a string and writes this to the stream. - // // - // __attribute NonCLSCompliantAttribute() - // public void Write(wchar *value) { - // Write(new String(value)); - // } - - // // Treats the byte* as a LPCSTR, converts it to a string, and writes it to the stream. - // // - // __attribute NonCLSCompliantAttribute() - // public void Write(byte *value) { - // Write(new String(value)); - // } -#endif - - - // Writes out a formatted string. Uses the same semantics as - // String.Format. - // - public virtual void Write(String format, Object arg0) - { - Write(String.Format(FormatProvider, format, arg0)); - } - - // Writes out a formatted string. Uses the same semantics as - // String.Format. - // - public virtual void Write(String format, Object arg0, Object arg1) - { - Write(String.Format(FormatProvider, format, arg0, arg1)); - } - - // Writes out a formatted string. Uses the same semantics as - // String.Format. - // - public virtual void Write(String format, Object arg0, Object arg1, Object arg2) - { - Write(String.Format(FormatProvider, format, arg0, arg1, arg2)); - } - - // Writes out a formatted string. Uses the same semantics as - // String.Format. - // - public virtual void Write(String format, params Object[] arg) - { - Write(String.Format(FormatProvider, format, arg)); - } - - - // Writes a line terminator to the text stream. The default line terminator - // is a carriage return followed by a line feed ("\r\n"), but this value - // can be changed by setting the NewLine property. - // - public virtual void WriteLine() { - Write(CoreNewLine); - } - - // Writes a character followed by a line terminator to the text stream. - // - public virtual void WriteLine(char value) { - Write(value); - WriteLine(); - } - - // Writes an array of characters followed by a line terminator to the text - // stream. - // - public virtual void WriteLine(char[] buffer) { - Write(buffer); - WriteLine(); - } - - // Writes a range of a character array followed by a line terminator to the - // text stream. - // - public virtual void WriteLine(char[] buffer, int index, int count) { - Write(buffer, index, count); - WriteLine(); - } - - // Writes the text representation of a boolean followed by a line - // terminator to the text stream. - // - public virtual void WriteLine(bool value) { - Write(value); - WriteLine(); - } - - // Writes the text representation of an integer followed by a line - // terminator to the text stream. - // - public virtual void WriteLine(int value) { - Write(value); - WriteLine(); - } - - // Writes the text representation of an unsigned integer followed by - // a line terminator to the text stream. - // - [CLSCompliant(false)] - public virtual void WriteLine(uint value) { - Write(value); - WriteLine(); - } - - // Writes the text representation of a long followed by a line terminator - // to the text stream. - // - public virtual void WriteLine(long value) { - Write(value); - WriteLine(); - } - - // Writes the text representation of an unsigned long followed by - // a line terminator to the text stream. - // - [CLSCompliant(false)] - public virtual void WriteLine(ulong value) { - Write(value); - WriteLine(); - } - - // Writes the text representation of a float followed by a line terminator - // to the text stream. - // - public virtual void WriteLine(float value) { - Write(value); - WriteLine(); - } - - // Writes the text representation of a double followed by a line terminator - // to the text stream. - // - public virtual void WriteLine(double value) { - Write(value); - WriteLine(); - } - - public virtual void WriteLine(decimal value) { - Write(value); - WriteLine(); - } - - // Writes a string followed by a line terminator to the text stream. - // - public virtual void WriteLine(String value) { - - if (value==null) { - WriteLine(); - } - else { - // We'd ideally like WriteLine to be atomic, in that one call - // to WriteLine equals one call to the OS (ie, so writing to - // console while simultaneously calling printf will guarantee we - // write out a string and new line chars, without any interference). - // Additionally, we need to call ToCharArray on Strings anyways, - // so allocating a char[] here isn't any worse than what we were - // doing anyways. We do reduce the number of calls to the - // backing store this way, potentially. - int vLen = value.Length; - int nlLen = CoreNewLine.Length; - char[] chars = new char[vLen+nlLen]; - value.CopyTo(0, chars, 0, vLen); - // CoreNewLine will almost always be 2 chars, and possibly 1. - if (nlLen == 2) { - chars[vLen] = CoreNewLine[0]; - chars[vLen+1] = CoreNewLine[1]; - } - else if (nlLen == 1) - chars[vLen] = CoreNewLine[0]; - else - Buffer.InternalBlockCopy(CoreNewLine, 0, chars, vLen * 2, nlLen * 2); - Write(chars, 0, vLen + nlLen); - } - /* - Write(value); // We could call Write(String) on StreamWriter... - WriteLine(); - */ - } - - // Writes the text representation of an object followed by a line - // terminator to the text stream. - // - public virtual void WriteLine(Object value) { - if (value==null) { - WriteLine(); - } - else { - // Call WriteLine(value.ToString), not Write(Object), WriteLine(). - // This makes calls to WriteLine(Object) atomic. - IFormattable f = value as IFormattable; - if (f != null) - WriteLine(f.ToString(null, FormatProvider)); - else - WriteLine(value.ToString()); - } - } - - // Writes out a formatted string and a new line. Uses the same - // semantics as String.Format. - // - public virtual void WriteLine(String format, Object arg0) - { - WriteLine(String.Format(FormatProvider, format, arg0)); - } - - // Writes out a formatted string and a new line. Uses the same - // semantics as String.Format. - // - public virtual void WriteLine (String format, Object arg0, Object arg1) - { - WriteLine(String.Format(FormatProvider, format, arg0, arg1)); - } - - // Writes out a formatted string and a new line. Uses the same - // semantics as String.Format. - // - public virtual void WriteLine (String format, Object arg0, Object arg1, Object arg2) - { - WriteLine(String.Format(FormatProvider, format, arg0, arg1, arg2)); - } - - // Writes out a formatted string and a new line. Uses the same - // semantics as String.Format. - // - public virtual void WriteLine (String format, params Object[] arg) - { - WriteLine(String.Format(FormatProvider, format, arg)); - } - - #region Task based Async APIs - [ComVisible(false)] - public virtual Task WriteAsync(char value) - { - var tuple = new Tuple<TextWriter, char>(this, value); - return Task.Factory.StartNew(state => - { - var t = (Tuple<TextWriter, char>)state; - t.Item1.Write(t.Item2); - }, - tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); - } - - [ComVisible(false)] - public virtual Task WriteAsync(String value) - { - var tuple = new Tuple<TextWriter, string>(this, value); - return Task.Factory.StartNew(state => - { - var t = (Tuple<TextWriter, string>)state; - t.Item1.Write(t.Item2); - }, - tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); - } - - [ComVisible(false)] - public Task WriteAsync(char[] buffer) - { - if (buffer == null) return Task.CompletedTask; - return WriteAsync(buffer, 0, buffer.Length); - } - - [ComVisible(false)] - public virtual Task WriteAsync(char[] buffer, int index, int count) - { - var tuple = new Tuple<TextWriter, char[], int, int>(this, buffer, index, count); - return Task.Factory.StartNew(state => - { - var t = (Tuple<TextWriter, char[], int, int>)state; - t.Item1.Write(t.Item2, t.Item3, t.Item4); - }, - tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); - } - - [ComVisible(false)] - public virtual Task WriteLineAsync(char value) - { - var tuple = new Tuple<TextWriter, char>(this, value); - return Task.Factory.StartNew(state => - { - var t = (Tuple<TextWriter, char>)state; - t.Item1.WriteLine(t.Item2); - }, - tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); - } - - [ComVisible(false)] - public virtual Task WriteLineAsync(String value) - { - var tuple = new Tuple<TextWriter, string>(this, value); - return Task.Factory.StartNew(state => - { - var t = (Tuple<TextWriter, string>)state; - t.Item1.WriteLine(t.Item2); - }, - tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); - } - - [ComVisible(false)] - public Task WriteLineAsync(char[] buffer) - { - if (buffer == null) return Task.CompletedTask; - return WriteLineAsync(buffer, 0, buffer.Length); - } - - [ComVisible(false)] - public virtual Task WriteLineAsync(char[] buffer, int index, int count) - { - var tuple = new Tuple<TextWriter, char[], int, int>(this, buffer, index, count); - return Task.Factory.StartNew(state => - { - var t = (Tuple<TextWriter, char[], int, int>)state; - t.Item1.WriteLine(t.Item2, t.Item3, t.Item4); - }, - tuple, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); - } - - [ComVisible(false)] - public virtual Task WriteLineAsync() - { - return WriteAsync(CoreNewLine); - } - - [ComVisible(false)] - public virtual Task FlushAsync() - { - return Task.Factory.StartNew(state => - { - ((TextWriter)state).Flush(); - }, - this, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); - } - #endregion - - [Serializable] - private sealed class NullTextWriter : TextWriter - { - internal NullTextWriter(): base(CultureInfo.InvariantCulture) { - } - - public override Encoding Encoding { - get { return Encoding.Default; } - } - - [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems. - public override void Write(char[] buffer, int index, int count) { - } - - public override void Write(String value) { - } - - // Not strictly necessary, but for perf reasons - public override void WriteLine() { - } - - // Not strictly necessary, but for perf reasons - public override void WriteLine(String value) { - } - - public override void WriteLine(Object value) { - } - } - - [Serializable] - internal sealed class SyncTextWriter : TextWriter, IDisposable - { - private TextWriter _out; - - internal SyncTextWriter(TextWriter t): base(t.FormatProvider) { - _out = t; - } - - public override Encoding Encoding { - get { return _out.Encoding; } - } - - public override IFormatProvider FormatProvider { - get { return _out.FormatProvider; } - } - - public override String NewLine { - [MethodImplAttribute(MethodImplOptions.Synchronized)] - get { return _out.NewLine; } - [MethodImplAttribute(MethodImplOptions.Synchronized)] - set { _out.NewLine = value; } - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Close() { - // So that any overriden Close() gets run - _out.Close(); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - protected override void Dispose(bool disposing) { - // Explicitly pick up a potentially methodimpl'ed Dispose - if (disposing) - ((IDisposable)_out).Dispose(); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Flush() { - _out.Flush(); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(char value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(char[] buffer) { - _out.Write(buffer); - } - - [SuppressMessage("Microsoft.Contracts", "CC1055")] // Skip extra error checking to avoid *potential* AppCompat problems. - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(char[] buffer, int index, int count) { - _out.Write(buffer, index, count); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(bool value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(int value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(uint value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(long value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(ulong value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(float value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(double value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(Decimal value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(String value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(Object value) { - _out.Write(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(String format, Object arg0) { - _out.Write(format, arg0); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(String format, Object arg0, Object arg1) { - _out.Write(format, arg0, arg1); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(String format, Object arg0, Object arg1, Object arg2) { - _out.Write(format, arg0, arg1, arg2); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void Write(String format, Object[] arg) { - _out.Write(format, arg); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine() { - _out.WriteLine(); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(char value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(decimal value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(char[] buffer) { - _out.WriteLine(buffer); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(char[] buffer, int index, int count) { - _out.WriteLine(buffer, index, count); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(bool value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(int value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(uint value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(long value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(ulong value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(float value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(double value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(String value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(Object value) { - _out.WriteLine(value); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(String format, Object arg0) { - _out.WriteLine(format, arg0); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(String format, Object arg0, Object arg1) { - _out.WriteLine(format, arg0, arg1); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(String format, Object arg0, Object arg1, Object arg2) { - _out.WriteLine(format, arg0, arg1, arg2); - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - public override void WriteLine(String format, Object[] arg) { - _out.WriteLine(format, arg); - } - - - // - // On SyncTextWriter all APIs should run synchronously, even the async ones. - // - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - [ComVisible(false)] - public override Task WriteAsync(char value) - { - Write(value); - return Task.CompletedTask; - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - [ComVisible(false)] - public override Task WriteAsync(String value) - { - Write(value); - return Task.CompletedTask; - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - [ComVisible(false)] - public override Task WriteAsync(char[] buffer, int index, int count) - { - Write(buffer, index, count); - return Task.CompletedTask; - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - [ComVisible(false)] - public override Task WriteLineAsync(char value) - { - WriteLine(value); - return Task.CompletedTask; - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - [ComVisible(false)] - public override Task WriteLineAsync(String value) - { - WriteLine(value); - return Task.CompletedTask; - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - [ComVisible(false)] - public override Task WriteLineAsync(char[] buffer, int index, int count) - { - WriteLine(buffer, index, count); - return Task.CompletedTask; - } - - [MethodImplAttribute(MethodImplOptions.Synchronized)] - [ComVisible(false)] - public override Task FlushAsync() - { - Flush(); - return Task.CompletedTask; - } - } - } -} |