欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 如何取消.net后臺線程的執(zhí)行

如何取消.net后臺線程的執(zhí)行

熱門標簽:蘇州銷售外呼系統(tǒng)預算 淘寶地圖標注如何做 東莞語音電銷機器人排名 外呼系統(tǒng)用員工身份證 使用智能電話機器人違法嗎 朝陽市地圖標注 電話機器人廣告話術(shù) 太原外呼電銷機器人費用 保山電話外呼管理系統(tǒng)怎么用
介紹
在使用多線程模型進行編程時,經(jīng)常遇到的問題之一是,當我們關(guān)閉前臺的UI線程時,后臺的輔助線程仍然處于活動狀態(tài),從而導致整個應用程序無法正常退出。這時我們需要一種較安全的方式來結(jié)束后臺線程的運行,這樣我們可以隨時結(jié)束后臺線程的運行,并且在線程結(jié)束時進行相應的資源清理工作(例如將內(nèi)存數(shù)據(jù)寫入硬盤)。.net框架提供了一些工具來實現(xiàn)該功能。

目錄
IsBackground屬性
Abort方法
輪循方式
取消阻塞的線程
IsBackgound屬性
Thread類提供了IsBackground屬性,當線程的IsBackground屬性被設置為true時,表示此線程為后臺工作線程。當一個應用程序結(jié)束時,它的所有后臺線程會自動的被結(jié)束執(zhí)行。如果你有一個后臺線程偵聽Socket連接,并且正在被阻塞,那么這時候通過設置線程的IsBackground屬性為True,使它自動隨應用程序的結(jié)束而結(jié)束是比較合適的。但在這種情況下,線程會靜悄悄的結(jié)束,它不會引發(fā)任何異常,你的線程沒有機會執(zhí)行一些需要的清理代碼。例如,內(nèi)存中的數(shù)據(jù)可能會來不及寫入磁盤,從而造成丟失數(shù)據(jù)。

Abort方法
可以調(diào)用Thread類的Abort方法來強制終制線程。上調(diào)用此方法時,線程上引發(fā)ThreadAbortException,并導至線程終結(jié),通過捕獲該異常,可以執(zhí)行一些資源清理代碼。但這種模式也有一些問題,主要是難以知道線程上的代碼執(zhí)行到什么地方,所有相應的資源清理代碼也難以編寫。總的來說這是一種比較粗暴的終止線程執(zhí)行的方法,通常來說是不推薦使用的。

輪循方式
如果后臺線程將執(zhí)行一個很長的計算,那么可以將計算隔成若干小段,并經(jīng)常檢查是否需要取消線程。.NET框架提供了CancellationTokenSource類來作為線程取消的統(tǒng)一模式。例如:
復制代碼 代碼如下:

public class Example
{
public static void Main()
{
CancellationTokenSource cts = new CancellationTokenSource();
var thread = new Thread(ThreadWork);
thread.Start(cts.Token);
while (true)
{
if(Console.ReadKey().KeyChar == 'c')
{
Console.WriteLine("請求取消線程的執(zhí)行");
cts.Cancel();
break;
}
}
Console.ReadLine();
}

private static void ThreadWork(object state)
{
CancellationToken cancellationToken = (CancellationToken)state;

while (true)
{
// 檢查是否取消
if(cancellationToken.IsCancellationRequested)
{
Console.WriteLine("線程已經(jīng)取消了");
Console.WriteLine("線程的資源已經(jīng)清理完成。");
break;
}
// 模擬工作
Thread.SpinWait(500000);
Console.WriteLine("我還在工作。");
}
}
}

取消阻塞的線程
上面的示例中,后臺線程會長時間進行計算,但更多的時候,線程會由于等待某個事件,從而進入阻塞狀態(tài)。這個時候,實際上線程已經(jīng)不再執(zhí)行狀態(tài)了,很明顯,它沒有機會去檢查取消標志。 那么,該如何解決這個問題呢?CancellationToken的WaitHandle屬性提供了解答。WaitHandle類有一個靜態(tài)方法WaitAny,它可以同時等待多個事件,當多個事件中的任意一個有效時,線程都會從阻塞狀態(tài)中返回。可以根據(jù)WaitAny方法的返回值來判斷發(fā)生了什么事件,從而相應的執(zhí)行代碼。例子:
復制代碼 代碼如下:

public class Example
{
private static int Value;

public static void Main()
{
var autoResetEvent = new AutoResetEvent(false);
var cts = new CancellationTokenSource();
var state = new { ValueAvailableEvent = autoResetEvent, CancellationToken = cts.Token };
var threadConsumer = new Thread(ConsumerThreadWork);
var threadProducter = new Thread(ProducterThreadWork);

threadConsumer.Start(state);
threadProducter.Start(state);

while (true)
{
if (Console.ReadKey().KeyChar == 'c')
{
Console.WriteLine("請求取消線程的執(zhí)行");
cts.Cancel();
break;
}
}
Console.ReadLine();

}
public static void ProducterThreadWork(dynamic state)
{
var valueAvailableEvent = (AutoResetEvent)state.ValueAvailableEvent;
var cancellationToken = (CancellationToken)state.CancellationToken;
var rand = new Random();
while (!cancellationToken.IsCancellationRequested)
{
Value = rand.Next();
Console.WriteLine("\r\n產(chǎn)生一個值{0}", Value);
valueAvailableEvent.Set();
Thread.Sleep(500);
}

Console.WriteLine("生產(chǎn)者線程被取消。");
}

public static void ConsumerThreadWork(dynamic state)
{
var valueAvailableEvent = (AutoResetEvent)state.ValueAvailableEvent;
var cancellationToken = (CancellationToken)state.CancellationToken;
var events = new[] { valueAvailableEvent, cancellationToken.WaitHandle };

while (true)
{
var eventIndex = WaitHandle.WaitAny(events);
// 處理數(shù)據(jù)
if (eventIndex == 0)
{
Console.WriteLine("處理值{0}。", Value);
}
// 處理取消事件
else if (eventIndex == 1)
{
Console.WriteLine("消費者線程被取消。");
break;
}
}
}
}

在上面的例子中,有三個線程,分別是UI線程,生產(chǎn)者線程和消費者線程。其中生產(chǎn)者線程每隔一秒產(chǎn)生一個有效數(shù)值,并將數(shù)據(jù)保存到Value字段中,而消費者線程等待值的產(chǎn)生,這個等待的過程是阻塞的。消費都線程通過WaitHandle.WaitAny方法來同時等待值有效事件或者取消事件,當任意一個事件有效時,線程都將繼續(xù),并且通過返回的值來判斷發(fā)生的事件,并作相應的處理。

總結(jié)
多線程模型中的線程取消問題還是比較復雜的。Thread.IsBackground屬性提供了在前臺線程結(jié)束后自動結(jié)束線程的方法。Thread.Abort方法提供了一種“粗暴”的結(jié)束線程的方法。CancellationTokenSource類則是線程取消的標準模式,我們應當更多的使用這種模式。文章寫的不多,基本是字數(shù)不夠,代碼來湊,大家伙將就的看看吧。
您可能感興趣的文章:
  • .net中線程同步的典型場景和問題剖析
  • ASP.NET線程相關(guān)配置

標簽:呼倫貝爾 阿里 潛江 運城 洛陽 綏化 西藏 克拉瑪依

巨人網(wǎng)絡通訊聲明:本文標題《如何取消.net后臺線程的執(zhí)行》,本文關(guān)鍵詞  如何,取消,.net,后臺,線程,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何取消.net后臺線程的執(zhí)行》相關(guān)的同類信息!
  • 本頁收集關(guān)于如何取消.net后臺線程的執(zhí)行的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    欧美一区二区不卡视频| 亚洲电影一区二区| 精品在线播放免费| 中文字幕乱码在线| 欧美日韩在线免费视频| 亚洲视频香蕉人妖| 大白屁股一区二区视频| 手机在线中文字幕| 国产日韩影视精品| 久久国产精品色婷婷| 免费看污黄网站在线观看| 日韩一区二区高清| 欧美aaaaaa午夜精品| 中文字幕狠狠干| 日韩午夜在线影院| 蜜桃传媒麻豆第一区在线观看| 老熟妇精品一区二区三区| 欧美一区二区三级| 日本美女视频一区二区| 午夜一区二区三区免费| 欧美成人vr18sexvr| 捆绑紧缚一区二区三区视频 | 欧美tickle裸体挠脚心vk| 日韩专区在线视频| 少妇户外露出[11p]| 日韩精品一区二区在线观看| 蜜桃av噜噜一区二区三区小说| 公侵犯人妻一区二区三区| 精品国产一区二区三区忘忧草| 久国产精品韩国三级视频| www色com| 国产精品天干天干在观线| 成人国产精品免费| 欧美专区在线观看一区| 亚洲成a人v欧美综合天堂下载| 国产精品嫩草av| 久久香蕉国产线看观看99| 国产成人aaa| 91福利在线观看| 午夜欧美2019年伦理| 美国黄色a级片| 国产欧美一区二区精品性| 国产成人av电影在线| 欧美亚洲一区三区| 日韩高清一级片| 蜜桃av免费在线观看| 自拍视频在线观看一区二区| 精品人妻在线视频| 337p粉嫩大胆色噜噜噜噜亚洲| 国产成人精品免费| 欧美日韩国产一级二级| 久久精品国产久精国产| 性色av无码久久一区二区三区| 亚洲综合在线电影| 欧美熟妇一区二区| 国产精品伦理在线| a级一a一级在线观看| 久久精品水蜜桃av综合天堂| 91伊人久久大香线蕉| 日韩欧美国产综合| 成人国产免费视频| 91精品国产综合久久精品性色| 国产综合久久久久影院| 在线观看av一区| 久久99九九99精品| 欧美自拍偷拍午夜视频| 九九精品视频在线看| 在线视频你懂得一区二区三区| 全部av―极品视觉盛宴亚洲| 午夜爱爱毛片xxxx视频免费看| 午夜国产精品一区| 日韩一级片av| 日本亚洲电影天堂| 色婷婷狠狠综合| 美腿丝袜在线亚洲一区| 色狠狠一区二区三区香蕉| 麻豆国产欧美日韩综合精品二区| 国产极品国产极品| 美女精品一区二区| 欧美丝袜丝交足nylons| 国产美女精品在线| 日韩一区二区在线免费观看| av成人动漫在线观看| 久久亚洲捆绑美女| 国产香蕉精品视频| 国产精品理论片| 欧美18—19性高清hd4k| 亚洲一区二区中文在线| 青花影视在线观看免费高清| 毛片一区二区三区| 欧美日韩成人一区| av电影天堂一区二区在线观看| 国产亚洲欧美色| 亚洲欧美日本一区| 亚洲最大成人综合| 色综合久久中文字幕综合网| 国产最新精品精品你懂的| 日韩欧美资源站| 特级特黄刘亦菲aaa级| 国产精品久久午夜夜伦鲁鲁| 99久久精品免费视频| 午夜久久福利影院| 欧美无乱码久久久免费午夜一区 | 91精品国产一区二区三区蜜臀| jizzjizzjizz欧美| 久久久www成人免费无遮挡大片 | 欧美日韩一级二级三级| 国产成人综合在线观看| 精品美女一区二区三区| 97精品人妻一区二区三区蜜桃| 亚洲激情五月婷婷| 色素色在线综合| 国产凹凸在线观看一区二区| 久久久亚洲午夜电影| 老司机福利av| 日韩av高清在线观看| 欧美精品第1页| 亚洲欧洲日韩综合| 一区二区三区精品久久久| 色哟哟国产精品免费观看| 国产成人在线视频网址| 久久久亚洲午夜电影| 亚洲理论片在线观看| 另类人妖一区二区av| 日韩欧美中文一区二区| 中文字幕在线观看网址| 日韩国产高清影视| 欧美一卡二卡在线| 免费的av网站| 奇米在线7777在线精品| 欧美成人猛片aaaaaaa| 日本黄色网址大全| 久久er精品视频| 久久久国际精品| 91ts人妖另类精品系列| 国产成人在线免费| 国产精品伦理一区二区| 一本大道av一区二区在线播放 | 久久日韩粉嫩一区二区三区| 在线观看国产精品一区| 国产在线一区观看| 国产日韩高清在线| 疯狂试爱三2浴室激情视频| 成人激情开心网| 亚洲精品高清视频在线观看| 在线视频你懂得一区| 国产乱淫av麻豆国产免费| 亚洲不卡一区二区三区| 日韩无一区二区| 美国黑人一级大黄| 成人高清视频在线| 亚洲专区一二三| 日韩欧美一二三四区| 欧美aaa级片| eeuss鲁片一区二区三区| 亚洲男人电影天堂| 制服丝袜亚洲色图| 蜜桃传媒一区二区亚洲| 国产.欧美.日韩| 一区二区三区美女视频| 日韩精品一区在线观看| 永久av免费网站| 亚洲精品久久一区二区三区777| 水野朝阳av一区二区三区| xnxx国产精品| 日本青青草视频| 中文字幕一区二区人妻电影丶| 麻豆国产一区二区| 亚洲欧洲美洲综合色网| 欧美狂野另类xxxxoooo| 亚洲精品一区二区三区影院忠贞| 成人一区在线看| 亚洲成国产人片在线观看| 久久网站最新地址| 久久久久亚洲av无码专区体验| 97中文字幕在线观看| 久久精品国产精品青草| 国产精品嫩草影院av蜜臀| 欧美日韩精品一区二区天天拍小说| 国产精品无码毛片| 国产成人免费视频精品含羞草妖精| 亚洲男人天堂av网| 亚洲精品在线一区二区| 色88888久久久久久影院野外| 女人被狂躁c到高潮| 丁香五精品蜜臀久久久久99网站| 亚洲一区影音先锋| 国产亚洲欧美在线| 欧美日韩不卡在线| 日韩免费av一区| 中文视频在线观看| 国产不卡高清在线观看视频| 在线观看成人小视频| 18禁裸乳无遮挡啪啪无码免费| 高清成人在线观看| 日韩高清在线电影| 亚洲精品国产无天堂网2021| 26uuu国产在线精品一区二区| 欧美亚洲一区二区在线观看| 国产精品久久免费观看|