前言
這個直接上代碼。
代碼邏輯是使用var tokenSource = new CancellationTokenSource();
讓tokenSource 去取消。值得注意的是取消線程后,線程會產生異常,可以在try catch 中查看,可以運行下面代碼即可查看到一個完整的邏輯。
正文
static void Main(string[] args)
{
Test_Delay();
Thread.Sleep(10000);
}
public static void Test_Delay()
{
var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;//創建終止標識
Task.Factory.StartNew(() => { Thread.Sleep(5000); tokenSource.Cancel(); //在等待期間被取消,那么此時將會出錯,不要用abort,相當不好。
});
Console.WriteLine("taskDelay1");
Task taskDelay1 = Task.Delay(100000, token);
try
{
taskDelay1.Wait();//等待
}
catch (AggregateException ae)
{
foreach (var v in ae.InnerExceptions)
Console.WriteLine(ae.Message + " " + v.Message);
}
taskDelay1.ContinueWith((t) => Console.WriteLine(t.Status.ToString()));
Thread.Sleep(100);
Console.WriteLine();
Console.WriteLine("taskDelay2");
Task taskDelay2 = Task.Delay(5000);
taskDelay2.ContinueWith((t) => Console.WriteLine(t.Status.ToString()));
}
后續
取消的原理后續補齊。
