C # отменить долгосрочное задание, которое не цикл - PullRequest
3 голосов
/ 22 февраля 2012

Я новичок в c # task, что я хочу сделать, это преобразовать

        downloadThread = new Thread(DownLoadFile); 
        downloadThread.Start();

в задачу типа

var t = Task.Factory.StartNew (DownLoadFile);

Я также знал, что для отмены используйте CancellationTokenSource.Но все примеры, которые я видел, это запуск потока с длинным циклом, например for, foreach, while и проверка IsCancellationRequested для отмены задачи в цикле.

if (ct.IsCancellationRequested) {break;}

но моя длительная задача - загрузить файл с ftp, GetFile - из сторонней библиотеки dll.

            ftp.GetFile(ftpPath, dest, false);

- это моя долгосрочная задачанет петель, как проверить отмену?

1 Ответ

4 голосов
/ 22 февраля 2012

Если сторонний API не поддерживает отмену, нет чистого способа сделать это.Вы можете прервать поток , но я бы настоятельно посоветовал вам делать это только в том случае, если вы убиваете весь процесс (или хотя бы AppDomain).

Если это вообще возможно, найдите эквивалентный API, который поддерживает поддержку отмены, или просто отмените запрос и дайте ему пройти, просто игнорируя результат.

...