CopyTo带有CancellationToken参数
本文关键字:参数 CancellationToken 带有 CopyTo | 更新日期: 2023-09-27 18:05:56
我看到CopyToAsync
有CancellationToken
参数。但我不需要CopyToAsync
,因为我的代码已经在后台线程中执行。我只想让CopyTo
过载,它需要CancellationToken
,并在每次复制bufferSize字节量时检查它。是否有任何内置的实现?
我刚刚采用。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框架设计者不关心长时间运行的同步操作的取消是令人失望的。
我可以说内置实现是CopyToAsync
与CancellationToken。
在我看来,你将花费更少的时间来实现CopyToAsync
(而不是CopyTo
),而不是构建你自己的cancel实现(并且更少的错误/bug风险)。
对于没有更好的答案的情况:您可以使用10行c#来实现同步复制循环,作为可重用的助手方法。看看Reflector是怎么做到的