- readWriteLoop = null;
- readWriteLoop = iar =>
- {for (bool isRead = (iar == null); ; isRead = !isRead)
- {
- switch (isRead)
- {
- case true:
- iar = source.BeginRead(buffer, 0, buffer.Length,
- readResult =>
- {
- if (readResult.CompletedSynchronously) return;
- readWriteLoop(readResult);
- }, null);
- if (!iar.CompletedSynchronously) return;
- break;
- case false:
- int numRead = source.EndRead(iar);
- if (numRead == 0)
- {
- return;
- }
- iar = destination.BeginWrite(buffer, 0, numRead,
- writeResult =>
- {
- if (writeResult.CompletedSynchronously) return;
- destination.EndWrite(writeResult);
- readWriteLoop(null);
- }, null);
- if (!iar.CompletedSynchronously) return;
- destination.EndWrite(iar);
- break;
- }
- }
- };
- readWriteLoop(null);
- }
- public async Task CopyToAsync(Stream source, Stream destination)
- {
- byte[] buffer = new byte[0x1000];
- int numRead;
- while ((numRead = await source.ReadAsync(buffer, 0, buffer.Length)) != 0)
- {
- await destination.WriteAsync(buffer, 0, numRead);
- }
- }
来源: http://www.92to.com/bangong/2018/06-14/33906374.html