我看到CopyToAsync
有CancellationToken
争论。但我不需要CopyToAsync
,因为我的代码已经在后台线程中执行。我只想有一个CopyTo
重载,CancellationToken
它每次复制 bufferSize 字节时都会检查它。有没有内置的实现?
问问题
1447 次
3 回答
2
我刚刚采用了 .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 设计人员并不关心取消长时间运行的同步操作。
于 2013-03-25T10:55:10.590 回答
1
我可以说内置实现是CopyToAsync
使用 CancellationToken。
在我看来,与构建自己的 Cancellation 实现相比,您将花费更少的时间来实现CopyToAsync
(而不是)(并且减少错误/错误的风险)。CopyTo
于 2013-03-25T10:06:07.277 回答
0
对于没有更好答案的情况:您可以使用 10 行 C# 代码实现一个同步复制循环作为可重用的辅助方法。看看 Reflector 是如何做到的。
于 2013-03-25T10:08:43.267 回答