.NET 根据条件使用 CancellationToken 关闭任务
.NET Close Task with CancellationToken upon condition
如何使用 CancellationToken 正确创建任务并根据条件关闭任务?
例如:
CancellationToken CancellationToken = new CancellationTokenSource();
Task.Run(() => {
try{
// Get some data from APIs...
GetDataFromApi();
}
catch(Exception ex)
{
// So here I want to cancel this task and I do not want any continuation Tasks to run
}
}, CancellationToken.Token);
我是否需要检查 CancellationToken 是否已取消或我该如何正确执行此操作?
谢谢
从技术上讲,将任务设置为 Canceled
状态的方法是抛出 OperationCanceledException
并传递与任务关联的取消令牌(通常通过调用 CancellationToken.ThrowIfCancellationRequested()
方法)。但这需要token的IsCancellationRequested
为true
。所以实现你想要的效果的一种方法是先取消,然后调用 ThrowIfCancellationRequested()
:
var cts = new CancellationTokenSource();
Task.Run(() => {
try
{
// Get some data from APIs...
GetDataFromApi();
}
catch (Exception ex)
{
cts.Cancel();
cts.Token.ThrowIfCancellationRequested();
}
}, cts.Token);
如何使用 CancellationToken 正确创建任务并根据条件关闭任务?
例如:
CancellationToken CancellationToken = new CancellationTokenSource();
Task.Run(() => {
try{
// Get some data from APIs...
GetDataFromApi();
}
catch(Exception ex)
{
// So here I want to cancel this task and I do not want any continuation Tasks to run
}
}, CancellationToken.Token);
我是否需要检查 CancellationToken 是否已取消或我该如何正确执行此操作?
谢谢
从技术上讲,将任务设置为 Canceled
状态的方法是抛出 OperationCanceledException
并传递与任务关联的取消令牌(通常通过调用 CancellationToken.ThrowIfCancellationRequested()
方法)。但这需要token的IsCancellationRequested
为true
。所以实现你想要的效果的一种方法是先取消,然后调用 ThrowIfCancellationRequested()
:
var cts = new CancellationTokenSource();
Task.Run(() => {
try
{
// Get some data from APIs...
GetDataFromApi();
}
catch (Exception ex)
{
cts.Cancel();
cts.Token.ThrowIfCancellationRequested();
}
}, cts.Token);