5

私は .net 4.0 のタスクとそのキャンセルを研究してきました。TPL が協力してキャンセルを正しく処理しようとしている点が気に入っています。

ただし、タスク内の呼び出しがブロックされて時間がかかる状況ではどうすればよいでしょうか? たとえば、IO/ネットワーク。

書き込みをキャンセルするのは明らかに危険です。しかし、それらは例です。

例: これをキャンセルするにはどうすればよいですか? DownloadFile長い時間がかかることがあります。

Task.Factory.StartNew(() =>
    WebClient client = new WebClient();
    client.DownloadFile(url, localPath);
);
4

1 に答える 1

1

タスクはキャンセル トークンをサポートします。CancellationTokenSource のインスタンスを作成し、その Token プロパティを DownloadFile メソッドに渡すことができます。次に、停止できるコード内のポイントで、トークンの IsCancellationRequested プロパティをチェックして、キャンセルが要求されたかどうかを確認します。

また、トークンを StartNew (メソッドの後) に渡す必要があります。

操作を実際にキャンセルするには、キャンセル トークンで Cancel メソッドを呼び出すことができます。

キャンセルに関するこの MSDN の記事を確認してください

于 2011-07-15T10:57:43.843 に答える