Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros
StreamToStreamCopy.cs
Go to the documentation of this file.
1using System.IO;
4
5namespace System.Net.Http;
6
7internal static class StreamToStreamCopy
8{
9 public static void Copy(Stream source, Stream destination, int bufferSize, bool disposeSource)
10 {
11 if (bufferSize == 0)
12 {
13 source.CopyTo(destination);
14 }
15 else
16 {
17 source.CopyTo(destination, bufferSize);
18 }
19 if (disposeSource)
20 {
22 }
23 }
24
25 public static Task CopyAsync(Stream source, Stream destination, int bufferSize, bool disposeSource, CancellationToken cancellationToken = default(CancellationToken))
26 {
27 try
28 {
29 Task task = ((bufferSize == 0) ? source.CopyToAsync(destination, cancellationToken) : source.CopyToAsync(destination, bufferSize, cancellationToken));
30 if (!disposeSource)
31 {
32 return task;
33 }
34 switch (task.Status)
35 {
36 case TaskStatus.RanToCompletion:
38 return Task.CompletedTask;
39 case TaskStatus.Canceled:
40 case TaskStatus.Faulted:
41 return task;
42 default:
43 return DisposeSourceAsync(task, source);
44 }
45 }
46 catch (Exception exception)
47 {
49 }
50 static async Task DisposeSourceAsync(Task copyTask, Stream source)
51 {
52 await copyTask.ConfigureAwait(continueOnCapturedContext: false);
54 }
55 }
56
57 private static void DisposeSource(Stream source)
58 {
59 try
60 {
61 source.Dispose();
62 }
63 catch (Exception message)
64 {
65 if (System.Net.NetEventSource.Log.IsEnabled())
66 {
67 System.Net.NetEventSource.Error(null, message, "DisposeSource");
68 }
69 }
70 }
71}
static Task CopyAsync(Stream source, Stream destination, int bufferSize, bool disposeSource, CancellationToken cancellationToken=default(CancellationToken))
static void DisposeSource(Stream source)
static void Copy(Stream source, Stream destination, int bufferSize, bool disposeSource)
static readonly System.Net.NetEventSource Log
static void Error(object thisOrContextObject, FormattableString formattableString, [CallerMemberName] string memberName=null)
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226
static Task FromException(Exception exception)
Definition Task.cs:3341
static Task CompletedTask
Definition Task.cs:1120