写一个完整上述的案例
时间: 2024-02-28 15:52:19 浏览: 16
好的,以下是一个完整的案例,可以演示如何使用CancellationTokenSource来停止Task.Run()方法启动的线程:
```
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
CancellationTokenSource cts = new CancellationTokenSource();
Task task = Task.Run(() =>
{
while (!cts.Token.IsCancellationRequested)
{
Console.WriteLine("线程正在执行...");
Thread.Sleep(1000); // 模拟线程执行任务
}
Console.WriteLine("线程已经被停止");
}, cts.Token);
Console.WriteLine("按任意键停止线程");
Console.ReadKey();
cts.Cancel();
task.Wait();
Console.WriteLine("任务已经完成");
}
}
```
在这个案例中,我们创建了一个CancellationTokenSource,然后使用Task.Run()方法启动了一个线程,并且传入了CancellationTokenSource的Token参数。在线程的lambda表达式中,使用了一个while循环来检查CancellationToken的状态,如果状态为IsCancellationRequested,则停止线程的执行。
在Main方法中,我们输出一条消息提示用户按任意键停止线程。当用户按下任意键时,我们调用CancellationTokenSource的Cancel()方法来通知线程停止执行。最后,我们使用Task.Wait()方法等待线程执行结束,然后输出一条消息提示任务已经完成。
当您执行这个程序时,您将看到线程每隔1秒钟输出一条消息,告诉您它正在执行。当您按下任意键时,线程将会被停止,并输出一条消息告诉您它已经停止执行。最后,您将看到一条消息告诉您任务已经完成。