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

◆ UploadBitsAsync()

async void System.Net.WebClient.UploadBitsAsync ( WebRequest request,
Stream readStream,
byte[] buffer,
int chunkSize,
byte[] header,
byte[] footer,
AsyncOperation asyncOp,
Action< byte[], Exception, AsyncOperation > completionDelegate )
inlineprivate

Definition at line 1198 of file WebClient.cs.

1199 {
1200 _progress.HasUploadPhase = true;
1201 Exception exception = null;
1202 try
1203 {
1204 if (request.RequestUri.Scheme == Uri.UriSchemeFile)
1205 {
1206 byte[] array;
1207 footer = (array = null);
1208 header = array;
1209 }
1210 using (Stream writeStream = await request.GetRequestStreamAsync().ConfigureAwait(continueOnCapturedContext: false))
1211 {
1212 if (header != null)
1213 {
1214 await writeStream.WriteAsync(new ReadOnlyMemory<byte>(header)).ConfigureAwait(continueOnCapturedContext: false);
1215 _progress.BytesSent += header.Length;
1217 }
1218 if (readStream != null)
1219 {
1220 using (readStream)
1221 {
1222 while (true)
1223 {
1224 int bytesRead2 = await readStream.ReadAsync(new Memory<byte>(buffer)).ConfigureAwait(continueOnCapturedContext: false);
1225 if (bytesRead2 <= 0)
1226 {
1227 break;
1228 }
1229 await writeStream.WriteAsync(new ReadOnlyMemory<byte>(buffer, 0, bytesRead2)).ConfigureAwait(continueOnCapturedContext: false);
1230 _progress.BytesSent += bytesRead2;
1232 }
1233 }
1234 }
1235 else
1236 {
1237 int bytesRead2 = 0;
1238 while (bytesRead2 < buffer.Length)
1239 {
1240 int toWrite = buffer.Length - bytesRead2;
1241 if (chunkSize != 0 && toWrite > chunkSize)
1242 {
1243 toWrite = chunkSize;
1244 }
1245 await writeStream.WriteAsync(new ReadOnlyMemory<byte>(buffer, bytesRead2, toWrite)).ConfigureAwait(continueOnCapturedContext: false);
1246 bytesRead2 += toWrite;
1247 _progress.BytesSent += toWrite;
1249 }
1250 }
1251 if (footer != null)
1252 {
1253 await writeStream.WriteAsync(new ReadOnlyMemory<byte>(footer)).ConfigureAwait(continueOnCapturedContext: false);
1254 _progress.BytesSent += footer.Length;
1256 }
1257 }
1258 DownloadBitsAsync(request, new ChunkedMemoryStream(), asyncOp, completionDelegate);
1259 }
1260 catch (Exception ex) when (!(ex is OutOfMemoryException))
1261 {
1263 AbortRequest(request);
1264 }
1265 finally
1266 {
1267 if (exception != null)
1268 {
1269 completionDelegate(null, exception, asyncOp);
1270 }
1271 }
1272 }
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
async void DownloadBitsAsync(WebRequest request, Stream writeStream, AsyncOperation asyncOp, Action< byte[], Exception, AsyncOperation > completionDelegate)
ProgressData _progress
Definition WebClient.cs:88
static Exception GetExceptionToPropagate(Exception e)
static void AbortRequest(WebRequest request)
Definition WebClient.cs:929
void PostProgressChanged(AsyncOperation asyncOp, ProgressData progress)
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226

References System.Net.WebClient._progress, System.Net.WebClient.AbortRequest(), System.array, System.buffer, System.Threading.Tasks.Task< TResult >.ConfigureAwait(), System.Net.WebClient.DownloadBitsAsync(), System.exception, System.Net.WebClient.GetExceptionToPropagate(), System.Net.WebRequest.GetRequestStreamAsync(), System.Net.WebClient.PostProgressChanged(), System.IO.Stream.ReadAsync(), System.Net.WebRequest.RequestUri, System.Uri.Scheme, System.Uri.UriSchemeFile, and System.IO.Stream.WriteAsync().

Referenced by System.Net.WebClient.UploadDataAsync(), System.Net.WebClient.UploadFileAsync(), System.Net.WebClient.UploadStringAsync(), and System.Net.WebClient.UploadValuesAsync().