以下を考えると:
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace CancelAsyncFileReadFailure {
class Program {
static void Main( string[ ] args ) {
Console.WriteLine( Foo( ).Result );
Console.ReadLine( );
}
public static async Task<TaskStatus> Foo( ) {
byte[] bar = new byte[192000]; //Some arbitrarily significant number...
using ( FileStream FS = new FileSTream( @"Path/To/WarAndPeace.txt", FileMode.Open ) ){
CancellationTokenSource CTS = new CancellationTokenSource( );
Task T = FS.ReadAsync( bar, 0, 192000, CTS.Token );
CTS.Cancel( );
await T;
return T.Status;
}
}
T
常に終了して戻りますRanToCompletion
。
私のユースケースは、いつでも開いたり閉じたりできるデバイスから読み取っているという点で、やや複雑です (したがって、ファイルから直接読み取るのではなく、安全なファイルハンドルから読み取っています。ただし、結果はこのケースと私の実際のユースケースの両方)。
FileStream.ReadToAsync( ) を中断 (キャンセル) したい。
現在の場所で読み取りを停止し、すぐにキャンセルするようにするにはどうすればよいですか?