CopyTo with CancellationToken参数

时间:2013-03-25 09:58:39

标签: c# .net cancellation-token

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

3 个答案:

答案 0 :(得分:1)

我可以说内置的实现是CopyToAsync和CancellationToken。

在我看来,您将花费更少的时间来实现CopyToAsync(而非CopyTo),而不是构建您自己的取消实施(并减少错误/错误的风险)。

答案 1 :(得分:1)

我刚接受.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);
    }
}

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

答案 2 :(得分:0)

对于没有更好的答案到达的情况:您可以使用10行C#实现同步复制循环作为可重用的辅助方法。看看Reflector如何做到这一点。