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

时间:2015-03-13 10:30:52

标签: c# asynchronous cancellation

是否可以取消Dns.GetHostEntryAsync()等异步库方法?

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

示例:

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

编辑:这个问题是关于库异步方法,采取CancellationToken。

1 个答案:

答案 0 :(得分:3)

虽然可以取消某些异步库方法,但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");
}