取消像 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");
}
是否可以取消像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");
}