議論CopyToAsync
があるようです。しかし、私のコードはすでにバックグラウンドスレッドで実行されているので、CancellationToken
必要ありません。bufferSizeのバイト数をコピーするたびにそれを取得してチェックするオーバーロードが必要CopyToAsync
です。組み込みの実装はありますか?CopyTo
CancellationToken
質問する
1447 次
3 に答える
2
.NET CopyToの実装を取得し、サイクルに1行追加しました。
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を使用していると言えます。
私の意見では、キャンセルの独自の実装を構築するよりもCopyToAsync
(ではなくCopyTo
)実装に費やす時間が少なくなります(エラー/バグのリスクも少なくなります)。
于 2013-03-25T10:06:07.277 に答える
0
より良い答えが得られない場合:再利用可能なヘルパーメソッドとして、10行のC#を使用して同期コピーループを実装できます。これがどのように行われるかをReflectorで覗いてみてください。
于 2013-03-25T10:08:43.267 に答える