だから私が理解していないのは、次のアプリケーションで何が起こるかです:
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("Object is " + ob);
その後、中断するときにt.Wait(1000)
行はありません。
プログラムの出力は次のとおりです。
TaskVersion:
TaskWithCancelationTokenVersion:
Object is something
ThreadVersion:
Object is something
つまりtask.Wait()
、スレッドを突然閉じて、それが行ったことをロールバックする方法にすぎませんか?