C# 为什么使用Tasks.Wait()回滚事件和使用取消令牌不';T

C# 为什么使用Tasks.Wait()回滚事件和使用取消令牌不';T,c#,.net,task-parallel-library,cancellation,C#,.net,Task Parallel Library,Cancellation,因此,我不明白的是,在以下应用程序中会发生什么: class Program { static void Main(string[] args) { Console.WriteLine("TaskVersion:"); Task t = new Task(waitCB, "something"); t.Wait(1000); Console.WriteLine("TaskWithCancelationTokenVe

因此,我不明白的是,在以下应用程序中会发生什么:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("TaskVersion:");
        Task t = new Task(waitCB, "something");
        t.Wait(1000);

        Console.WriteLine("TaskWithCancelationTokenVersion:");
        CancellationTokenSource cts = new CancellationTokenSource();
        Task tct = new Task(waitCB, "something", cts.Token);
        tct.Start();
        Thread.Sleep(1000);
        cts.Cancel();

        Console.WriteLine("ThreadVersion:");
        Thread th = new Thread(waitCB);
        th.Start("something");
        Thread.Sleep(1000);
        th.Abort();
    }

    static void waitCB(object ob)
    {
        Console.WriteLine("Object is " + ob);
        Thread.Sleep(10000);
    }
}
在第一个示例中,我认为程序应该执行以下行:
Console.WriteLine(“objectis”+ob)然后当它将中止时
t.Wait(1000)
没有任何行

程序的输出为:

TaskVersion:
TaskWithCancelationTokenVersion:
Object is something
ThreadVersion:
Object is something

所以
task.Wait()
这只是一种突然关闭线程并回滚它所做的事情的方法?

我认为您的问题与取消或
Wait()
无关,您只是忘记了
Start()
第一个
任务基本上是任务。等待(超时)不在乎任务是否在超时过期后完成。您应该使用取消令牌检查其IsCancellationRequested属性&调用throwifcCancellationRequested以取消任务我正要发布相同的答案。