So what I don’t understand is what happens in the following application:
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);
}
}
At the first example I think that the program should execute the line: Console.WriteLine("Object is " + ob); and then when it will abort t.Wait(1000) there isn’t any line.
The programs’ output is:
TaskVersion:
TaskWithCancelationTokenVersion:
Object is something
ThreadVersion:
Object is something
So task.Wait() it’s just a way to abruptly close a thread and it rollback what it has done?
I think your issues have nothing to do with cancellation or
Wait(), you just forgot toStart()the firstTask.