C# task.run开启一个任务,如何使用CancellationTokenSource来中途随时可以取消
时间: 2024-09-14 19:05:03 浏览: 48
在C#中,`Task.Run`用于异步地启动一个新的工作线程执行某个操作。如果你想让这个任务能够被中途取消,你可以使用`CancellationTokenSource`(CancellationToken和CancellationTokenSource的组合)。以下是一个简单的步骤说明:
1. 创建一个`CancellationTokenSource`实例:
```csharp
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
```
2. 当你需要取消任务时,调用`cancellationTokenSource.Cancel()`方法:
```csharp
if (/* 某种条件触发需要取消 */)
{
cancellationTokenSource.Cancel();
}
```
3. 将`CancellationToken`传递给你的任务函数。在`async Task`中,可以这样做:
```csharp
public async Task MyAsyncMethod(CancellationToken token)
{
try
{
// 在这里执行你的任务
while (!token.IsCancellationRequested)
{
// 使用token检查是否已被取消
if (token.WaitHandle.WaitOne(0))
break; // 如果已取消,则跳出循环
// 执行任务的代码...
}
}
catch (OperationCanceledException)
{
Console.WriteLine("任务被取消了");
}
finally
{
// 清理资源
}
}
```
4. 在`Task.Run`调用中传入`cancellationToken`:
```csharp
Task task = Task.Run(() => MyAsyncMethod(cancellationTokenSource.Token), cancellationTokenSource.Token);
```
当你需要停止任务时,只需要取消`CancellationTokenSource`即可。
阅读全文