2011-07-15 8 views
5

私は.net 4.0のタスクとそれらのキャンセルについて勉強してきました。私は、TPLが協力的に正しく取り消そうとしているのが好きです。タスクを使用して長時間実行しているIO /ネットワーク操作をキャンセルするにはどうすればよいでしょうか?

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

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

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

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

あなたの状況についてのコードスニペットを投稿できますか? –

答えて

1

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

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

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

チェックアウトthis MSDN article on cancellation

+1

申し訳ありませんが、私の質問の全体的なポイントは、私がコントロールできない操作についてのものでした。 DownloadFileは私の方法ではありません。 – Kugel

+0

キャンセルがサポートされているAsyncバージョンがある場合(ダウンロードファイルがある場合)のみ、これを行うことができます。 –

関連する問題