+ void CheckState ()\r
+ {\r
+ if (byte_buf == null)\r
+ throw new ObjectDisposedException ("StreamWriter");\r
+\r
+#if NET_4_5\r
+ if (async_task != null && !async_task.IsCompleted)\r
+ throw new InvalidOperationException ();\r
+#endif\r
+ }\r
+\r
+#if NET_4_5\r
+ public override Task FlushAsync ()\r
+ {\r
+ CheckState ();\r
+ DecoupledTask res;\r
+ async_task = res = new DecoupledTask (FlushCoreAsync ());\r
+ return res.Task;\r
+ }\r
+\r
+ public override Task WriteAsync (char value)\r
+ {\r
+ CheckState ();\r
+\r
+ DecoupledTask res;\r
+ async_task = res = new DecoupledTask (WriteAsyncCore (value));\r
+ return res.Task;\r
+ }\r
+\r
+ async Task WriteAsyncCore (char value)\r
+ {\r
+ // the size of decode_buf is always > 0 and\r
+ // we check for overflow right away\r
+ if (decode_pos >= decode_buf.Length)\r
+ await DecodeAsync ().ConfigureAwait (false);\r
+ decode_buf [decode_pos++] = value;\r
+\r
+ if (iflush)\r
+ await FlushCoreAsync ().ConfigureAwait (false);\r
+ }\r
+\r
+ public override Task WriteAsync (char[] buffer, int index, int count)\r
+ {\r
+ CheckState ();\r
+ if (buffer == null)\r
+ return TaskConstants.Finished;\r
+\r
+ DecoupledTask res;\r
+ async_task = res = new DecoupledTask (WriteAsyncCore (buffer, index, count));\r
+ return res.Task;\r
+ }\r
+\r
+ async Task WriteAsyncCore (char[] buffer, int index, int count)\r
+ {\r
+ // Debug.Assert (buffer == null);\r
+\r
+ await LowLevelWriteAsync (buffer, index, count).ConfigureAwait (false);\r
+\r
+ if (iflush)\r
+ await FlushCoreAsync ().ConfigureAwait (false);\r
+ }\r
+\r
+ public override Task WriteAsync (string value)\r
+ {\r
+ CheckState ();\r
+\r
+ if (value == null)\r
+ return TaskConstants.Finished;\r
+\r
+ DecoupledTask res; \r
+ async_task = res = new DecoupledTask (WriteAsyncCore (value, false));\r
+ return res.Task;\r
+ }\r
+\r
+ async Task WriteAsyncCore (string value, bool appendNewLine)\r
+ {\r
+ // Debug.Assert (value == null);\r
+\r
+ await LowLevelWriteAsync (value).ConfigureAwait (false);\r
+ if (appendNewLine)\r
+ await LowLevelWriteAsync (CoreNewLine, 0, CoreNewLine.Length).ConfigureAwait (false);\r
+ \r
+ if (iflush)\r
+ await FlushCoreAsync ().ConfigureAwait (false);\r
+ } \r
+\r
+ public override Task WriteLineAsync ()\r
+ {\r
+ CheckState ();\r
+\r
+ DecoupledTask res;\r
+ async_task = res = new DecoupledTask (WriteAsyncCore (CoreNewLine, 0, CoreNewLine.Length));\r
+ return res.Task;\r
+ }\r
+\r
+ public override Task WriteLineAsync (char value)\r
+ {\r
+ CheckState ();\r
+ DecoupledTask res;\r
+ async_task = res = new DecoupledTask (WriteLineAsyncCore (value));\r
+ return res.Task;\r
+ }\r
+\r
+ async Task WriteLineAsyncCore (char value)\r