带有 CancellationToken 参数的 CopyTo

Sib*_*Guy 3 .net c# cancellation-token

我看到CopyToAsyncCancellationToken争论。但我不需要CopyToAsync,因为我的代码已经在后台线程中执行。我只想进行CopyTo重载,CancellationToken每次复制 bufferSize 字节数时都会进行检查。有没有内置的实现?

Sib*_*Guy 5

我刚刚采用了 .NET CopyTo 实现并在循环中添加了一行:

public static void CopyTo(this Stream source, Stream destination, int bufferSize, CancellationToken cancellationToken)
{
    var buffer = new byte[bufferSize];
    int count;
    while ((count = source.Read(buffer, 0, buffer.Length)) != 0)
    {
        cancellationToken.ThrowIfCancellationRequested();
        destination.Write(buffer, 0, count);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我发现令人失望的是 .NET Framework 设计者并不关心长时间运行的同步操作的取消。