Cancel()
my のメソッドを呼び出して次のコンテンツで非同期メソッドをキャンセルすると、CancellationTokenSource
最終的に停止します。ただし、行Console.WriteLine(await reader.ReadLineAsync());
が完了するまでにかなりの時間がかかるため、呼び出しに対するメソッドの応答性を高めるために、(空の文字列が返されることを期待して) to もCancellationToken
渡そうとしました。ただし、 to を渡すことができませんでした。ReadLineAsync()
Cancel()
CancellationToken
ReadLineAsync()
Console.WriteLine()
orへの通話をキャンセルできますか? キャンセルできるStreamreader.ReadLineAsync()
場合、どうすればよいですか?
ReadLineAsync()
が受け入れないのはなぜCancellationToken
ですか? CancellationToken
メソッドがキャンセルされた後も完了する場合でも、非同期メソッドにオプションのパラメーターを与えることをお勧めします。
StreamReader reader = new StreamReader(dataStream);
while (!reader.EndOfStream)
{
if (ct.IsCancellationRequested){
ct.ThrowIfCancellationRequested();
break;
}
else
{
Console.WriteLine(await reader.ReadLineAsync());
}
}
更新: 以下のコメントに記載されているように、Console.WriteLine()
1 行あたり 40.000 文字の不適切な形式の入力文字列が原因で、呼び出しだけですでに数秒かかっていました。これを分解すると応答時間の問題は解決しますが、何らかの理由で 40.000 文字を 1 行に書き込むことが意図されていた場合 (たとえば、文字列全体をファイル)。