Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ DownloadBitsAsync()

async void System.Net.WebClient.DownloadBitsAsync ( WebRequest request,
Stream writeStream,
AsyncOperation asyncOp,
Action< byte[], Exception, AsyncOperation > completionDelegate )
inlineprivate

Definition at line 1074 of file WebClient.cs.

1075 {
1076 Exception exception = null;
1077 try
1078 {
1079 WebResponse webResponse = (_webResponse = await GetWebResponseTaskAsync(request).ConfigureAwait(continueOnCapturedContext: false));
1080 long contentLength = webResponse.ContentLength;
1081 byte[] copyBuffer = new byte[(contentLength == -1 || contentLength > 65536) ? 65536 : contentLength];
1082 if (writeStream is ChunkedMemoryStream)
1083 {
1084 if (contentLength > int.MaxValue)
1085 {
1086 throw new WebException(System.SR.net_webstatus_MessageLengthLimitExceeded, WebExceptionStatus.MessageLengthLimitExceeded);
1087 }
1088 writeStream.SetLength(copyBuffer.Length);
1089 }
1090 if (contentLength >= 0)
1091 {
1092 _progress.TotalBytesToReceive = contentLength;
1093 }
1094 using (writeStream)
1095 {
1096 using Stream readStream = webResponse.GetResponseStream();
1097 if (readStream != null)
1098 {
1099 while (true)
1100 {
1101 int num = await readStream.ReadAsync(new Memory<byte>(copyBuffer)).ConfigureAwait(continueOnCapturedContext: false);
1102 if (num == 0)
1103 {
1104 break;
1105 }
1106 _progress.BytesReceived += num;
1108 {
1110 }
1111 await writeStream.WriteAsync(new ReadOnlyMemory<byte>(copyBuffer, 0, num)).ConfigureAwait(continueOnCapturedContext: false);
1112 }
1113 }
1115 {
1116 _progress.TotalBytesToReceive = _progress.BytesReceived;
1117 }
1119 }
1120 completionDelegate((writeStream as ChunkedMemoryStream)?.ToArray(), null, asyncOp);
1121 }
1122 catch (Exception ex) when (!(ex is OutOfMemoryException))
1123 {
1125 AbortRequest(request);
1126 writeStream?.Close();
1127 }
1128 finally
1129 {
1130 if (exception != null)
1131 {
1132 completionDelegate(null, exception, asyncOp);
1133 }
1134 }
1135 }
void SetLength(long value)
virtual void Close()
Definition Stream.cs:644
Task WriteAsync(byte[] buffer, int offset, int count)
Definition Stream.cs:914
Task< int > ReadAsync(byte[] buffer, int offset, int count)
Definition Stream.cs:762
ProgressData _progress
Definition WebClient.cs:88
static Exception GetExceptionToPropagate(Exception e)
WebResponse _webResponse
Definition WebClient.cs:74
static void AbortRequest(WebRequest request)
Definition WebClient.cs:929
async Task< WebResponse > GetWebResponseTaskAsync(WebRequest request)
Definition WebClient.cs:465
void PostProgressChanged(AsyncOperation asyncOp, ProgressData progress)
static string net_webstatus_MessageLengthLimitExceeded
Definition SR.cs:24
Definition SR.cs:7
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226

References System.Net.WebClient._progress, System.Net.WebClient._webResponse, System.Net.WebClient.AbortRequest(), System.Net.WebClient.ProgressData.BytesReceived, System.IO.Stream.Close(), System.Threading.Tasks.Task< TResult >.ConfigureAwait(), System.Net.WebResponse.ContentLength, System.exception, System.Net.WebClient.GetExceptionToPropagate(), System.Net.WebResponse.GetResponseStream(), System.Net.WebClient.GetWebResponseTaskAsync(), System.SR.net_webstatus_MessageLengthLimitExceeded, System.Net.WebClient.PostProgressChanged(), System.IO.Stream.ReadAsync(), System.IO.Stream.SetLength(), System.Net.WebClient.ProgressData.TotalBytesToReceive, and System.IO.Stream.WriteAsync().

Referenced by System.Net.WebClient.DownloadDataAsync(), System.Net.WebClient.DownloadFileAsync(), System.Net.WebClient.DownloadStringAsync(), and System.Net.WebClient.UploadBitsAsync().