C# 取消一个长时间运行的任务,而不是一个循环

pri*_*e23 5 c# multithreading task

我是 C# 任务的新手,我想做的是转换

downloadThread = new Thread(DownLoadFile); 
downloadThread.Start();
Run Code Online (Sandbox Code Playgroud)

像任务一样

var t = Task.Factory.StartNew(DownLoadFile);
Run Code Online (Sandbox Code Playgroud)

我也知道使用 CancellationTokenSource 取消任务。但是,我看到的例子都是长循环运行线程,比如for, foreach, while, 他们检查IsCancellationRequested取消循环中的任务。

if (ct.IsCancellationRequested)
{
    break;
}
Run Code Online (Sandbox Code Playgroud)

但我长期运行的任务是使用 FTP 下载文件。该GetFile方法来自第三方 dll 库。

ftp.GetFile(ftpPath, dest, false);
Run Code Online (Sandbox Code Playgroud)

由于我的长时间运行的任务不在任何循环中,我如何检查然后取消它?

Jon*_*eet 6

如果第三方 API 不支持取消,则没有干净的方法。您可以 中止线程,但我强烈建议您仅在杀死整个进程(或至少是 AppDomain)时才这样做。

如果可能的话,找一个相当于API,它支持取消,或只是放弃请求,让它顺其自然,只是忽略的结果。