取消像 Dns.GetHostEntryAsync() 这样的库异步方法

Cancel a library async method like Dns.GetHostEntryAsync()

是否可以取消像Dns.GetHostEntryAsync()这样的异步库方法?

我有数百个这样的任务 运行 并行(DNS 黑名单查找),我时不时需要取消整个任务列表。

示例:

List<Task<IPHostEntry>> tasks = new List<Task<IPHostEntry>>();
foreach (string s in BlackLists)
{
    tasks.Add(Dns.GetHostEntryAsync(s));
}

编辑:这个问题是关于接受CancellationToken的库异步方法。

虽然可以取消某些异步库方法,但对于 Dns.GetHostEntryAsync 是不可能的,因为您无法为其提供 CancellationToken。

有关如何取消支持取消的异步方法的详细信息,请参阅Cancellation in Managed Threads

var cts = new CancellationTokenSource();
//Task.Delay allows me to provide a cancellation token
var task = Task.Delay(new TimeSpan(1, 0, 0), cts.Token);
cts.Cancel();
try
{
  await task;
}
  catch (OperationCanceledException)
{
  Console.WriteLine("Cancelled");
}