Что было бы хорошим способом отменить длительную работу ввода-вывода / сети с помощью задач? - PullRequest
5 голосов
/ 15 июля 2011

Я изучал задачи в .net 4.0 и их отмену.Мне нравится тот факт, что TPL пытается корректно справиться с отменой в совместном порядке.

Однако что делать в ситуации, когда вызов внутри задачи блокируется и занимает много времени?Например, IO / Network.

Очевидно, что отмена записи будет опасной.Но это примеры.

Пример: Как бы я отменил это?DownloadFile может занять много времени.

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

1 Ответ

1 голос
/ 15 июля 2011

Задача поддерживает отмену токенов. Вы можете создать экземпляр класса CancellationTokenSource и передать его свойство Token в метод DownloadFile. Затем в точках своего кода, где вы можете остановиться, проверьте токены, свойство IsCancellationRequested, чтобы узнать, была ли запрошена отмена.

Вы также должны передать токен StartNew (после метода).

Чтобы фактически отменить операцию, вы можете вызвать метод Cancel для токена отмены.

Проверьте эту статью MSDN об отмене

...