是否可以取消Dns.GetHostEntryAsync()
等异步库方法?
我有数百个这些任务并行运行(DNS黑名单查找),我不时地要取消整个任务列表。
示例:
List<Task<IPHostEntry>> tasks = new List<Task<IPHostEntry>>();
foreach (string s in BlackLists)
{
tasks.Add(Dns.GetHostEntryAsync(s));
}
编辑:这个问题是关于库异步方法,不采取CancellationToken。
答案 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");
}