亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c#牛人進。。

c#牛人進。。

12345678_0001 2018-12-07 13:51:10
var source =new CancellationTokenSource();var token = source.Token;var task = Task.Factory.StartNew(() =>{??? Console.WriteLine("Task starting...");??? while (true)??? {??????? token.ThrowIfCancellationRequested();??????? Console.WriteLine("I'm alive. {0}",DateTime.Now);??????? Thread.Sleep(1000);??? }},token);在c#并行處理中。在實際項目中。不可能使用while(true)這種方式進行循環驗證。。如果只是一個方法執行下去。請問怎樣取消掉該任務???
查看完整描述

2 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

研究了下貌似沒什么好辦法,提供兩個參考 1、可能在耗時任務中“常常”if (curToken.IsCancellationRequested){}這樣判斷是個好習慣。 2、使用token.Regester()+Abort()終止線程,這個好像很偏,后遺癥也不知道,代碼如下 var source = new CancellationTokenSource(); var token = source.Token; var task = Task.Factory.StartNew((objToken) => { CancellationToken curToken = (CancellationToken)objToken; curToken.Register((objThread) => { Thread curThread = objThread as Thread; Console.WriteLine(String.Format("線程ID為{0},Task終止", curThread.ManagedThreadId)); curThread.Abort(); } , Thread.CurrentThread); Console.WriteLine("Task starting..."); while (true) { Console.WriteLine(String.Format("線程ID為{0},I'm alive. {1}", Thread.CurrentThread.ManagedThreadId, DateTime.Now)); Thread.Sleep(1000); } }, token); Thread.Sleep(5000); try { source.Cancel(); } catch { // 使用curThread.Abort();這里捕獲不到異常System.Threading.ThreadAbortException } 結果圖:
查看完整回答
反對 回復 2018-12-09
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

while(flag){ // } 外部改變flag值為false后,循環就結束了。
查看完整回答
反對 回復 2018-12-09
  • 2 回答
  • 0 關注
  • 377 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號