task 如何終止線程


前言

這個直接上代碼。

代碼邏輯是使用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()));
}

后續

取消的原理后續補齊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM