我是C#中UWP应用程序的初学者。我需要取消正在进行的阻塞呼叫时的任务。请参阅下面的代码片段以更好地理解。
TimeSpan timeSpan = TimeSpan.FromMilliseconds(10000);
CancellationToken token = new CancellationTokenSource(timeSpan).Token;
await Task.Run(() =>
{
//This is a blocking call
Task.Delay(11002).Wait();
}, token);
据我所知,如果我像Task.Delay(11002).Wait(token);
那样执行阻塞调用,则延迟任务将被取消,但我的要求是取消父任务。因为我要在任务中写一个同步套接字。
希望我的问题对每个人都是可以理解的。 谢谢
答案 0 :(得分:0)
我建议在您将要使用的方法之外创建取消令牌源,并将其传递给Neil在他的评论中提到。
下面是一个示例,显示了如何执行此操作以及如何取消它。
private async Task ParentAsync()
{
TimeSpan timeSpan = TimeSpan.FromMilliseconds(10000);
CancellationTokenSource cts = new CancellationTokenSource(timeSpan);
await ExecuteAsync(cts);
cts.Cancel(); // This will cause the execution to cancel.
}
private async Task ExecuteAsync(CancellationTokenSource cts)
{
await Task.Run(() =>
{
//This is a blocking call
Task.Delay(11002).Wait();
}, cts.Token);
}
如果您希望取消执行父方法,则可以使用令牌处理取消任务的方式执行与子方法相同的步骤。
希望这会有所帮助!