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以取消任务我正要发布相同的答案。