婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

如何取消.net后臺線程的執行

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

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

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

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

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("請求取消線程的執行");
cts.Cancel();
break;
}
}
Console.ReadLine();
}

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

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

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

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("請求取消線程的執行");
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產生一個值{0}", Value);
valueAvailableEvent.Set();
Thread.Sleep(500);
}

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

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);
// 處理數據
if (eventIndex == 0)
{
Console.WriteLine("處理值{0}。", Value);
}
// 處理取消事件
else if (eventIndex == 1)
{
Console.WriteLine("消費者線程被取消。");
break;
}
}
}
}

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

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

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

巨人網絡通訊聲明:本文標題《如何取消.net后臺線程的執行》,本文關鍵詞  如何,取消,.net,后臺,線程,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何取消.net后臺線程的執行》相關的同類信息!
  • 本頁收集關于如何取消.net后臺線程的執行的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久午夜羞羞影院免费观看| 日韩美女一区二区三区四区| 91福利精品第一导航| 欧美mv和日韩mv国产网站| 亚洲国产视频在线| 91福利社在线观看| 亚洲精品免费视频| 91行情网站电视在线观看高清版| 亚洲色图.com| 欧美亚洲精品一区| 亚洲电影在线免费观看| 欧美日韩精品欧美日韩精品| 午夜久久久久久| 日韩无一区二区| 日韩高清欧美激情| 日韩欧美的一区| 成人丝袜18视频在线观看| 日韩一区在线免费观看| 日本二三区不卡| 婷婷久久综合九色国产成人 | 久久99这里只有精品| 日韩一二三区视频| 免费精品99久久国产综合精品| 久久综合九色综合97婷婷女人 | 天天射综合影视| 日韩欧美亚洲国产精品字幕久久久| 精品在线一区二区| 久久久精品国产免大香伊| 91在线视频播放地址| 一区二区三区美女视频| 欧美亚日韩国产aⅴ精品中极品| 久久精品免费观看| 1000精品久久久久久久久| 色综合天天综合狠狠| 亚洲成在线观看| 国产无人区一区二区三区| 成人丝袜高跟foot| 亚洲激情图片小说视频| 欧美精品一区二区三区很污很色的 | 亚洲综合色视频| 精品99999| 日本韩国欧美一区二区三区| 亚洲一区二区三区中文字幕| 555www色欧美视频| 国产91精品欧美| 蜜桃av噜噜一区二区三区小说| 日韩美女久久久| 日韩一区二区在线看| youjizz国产精品| 经典三级在线一区| 亚洲午夜av在线| 亚洲精品一二三四区| 欧美本精品男人aⅴ天堂| 成人av集中营| 麻豆精品在线看| 亚洲免费资源在线播放| 久久久一区二区三区| 在线不卡一区二区| 成人激情免费视频| 久久国产精品99久久人人澡| 亚洲一区二区精品视频| 中文字幕一区二区三区四区| 亚洲国产成人私人影院tom| 欧美一区二区三区色| 日本道精品一区二区三区| 成人高清免费在线播放| 青青草原综合久久大伊人精品| 亚洲成av人片一区二区| 亚洲午夜在线观看视频在线| 久久综合成人精品亚洲另类欧美| 欧美一区二区三区思思人| 欧洲视频一区二区| 99re这里只有精品视频首页| 99精品国产视频| 国产suv精品一区二区三区| 国产一本一道久久香蕉| 国内成人自拍视频| 韩国精品久久久| 精品在线一区二区| 日韩在线观看一区二区| 激情欧美日韩一区二区| 一区二区三区欧美| 亚洲精品国产品国语在线app| 亚洲综合激情网| 日韩精品成人一区二区在线| 美国十次了思思久久精品导航| 久久99国产精品久久99| 国产99久久久国产精品| av电影在线观看一区| 欧美色综合网站| 日韩视频一区在线观看| 国产亚洲精品aa午夜观看| 亚洲私人黄色宅男| 天天影视涩香欲综合网| 美女久久久精品| 国产成人啪免费观看软件| 99视频精品在线| 欧美三区在线观看| 国产午夜三级一区二区三| 亚洲婷婷在线视频| 轻轻草成人在线| 99re成人精品视频| 精品久久人人做人人爰| 中文字幕一区二区三区精华液 | 91激情在线视频| 日韩欧美激情在线| 亚洲欧美国产毛片在线| 久久精品国产久精国产| 国产精品1024| 欧美一区二区在线免费观看| 久久精品视频在线免费观看 | 欧美专区日韩专区| 日韩欧美国产精品一区| 欧美精品一区二区三区久久久| 亚洲国产视频在线| 国产99久久久精品| 日韩精品专区在线影院重磅| 亚洲欧美日韩电影| 国产做a爰片久久毛片| 欧美亚洲动漫另类| 久久免费精品国产久精品久久久久| 国产精品美女久久久久久久久| 日韩电影在线一区二区| 国产午夜亚洲精品不卡| 亚洲美女屁股眼交3| 国产一区二区剧情av在线| 久久国产夜色精品鲁鲁99| 日本韩国精品在线| 亚洲色图.com| 99视频精品在线| 国产精品欧美一级免费| 激情综合网天天干| 日韩欧美成人激情| 日韩国产精品大片| 欧美久久久久免费| 亚瑟在线精品视频| 欧美三级视频在线观看| 一区二区三区不卡视频| 色综合天天性综合| 国产精品久久久久久久蜜臀| 中文字幕一区二区三| 99国产精品99久久久久久| 国产欧美一区视频| www.亚洲人| 亚洲免费av网站| 欧美亚洲高清一区二区三区不卡| 一区二区在线观看视频| 欧洲另类一二三四区| 亚洲一区二区三区免费视频| 欧美日韩在线播放| 亚洲国产日韩a在线播放性色| 91丨九色porny丨蝌蚪| 国产精品系列在线| 色综合中文综合网| 久久99精品久久久久婷婷| 欧美一级黄色片| 国产剧情在线观看一区二区| 欧美激情在线一区二区三区| 高清国产一区二区| 国产精品女主播av| 91高清在线观看| 久久国产精品区| 国产精品色一区二区三区| 91在线视频官网| 视频一区免费在线观看| 精品欧美一区二区三区精品久久| 国产一区二区在线影院| 国产三级久久久| 欧美性三三影院| 九九热在线视频观看这里只有精品| 日韩小视频在线观看专区| 国产成人一级电影| 亚洲一本大道在线| 成人一区二区在线观看| 日韩精品一区二区在线观看| 韩国毛片一区二区三区| 亚洲欧美激情小说另类| 欧美哺乳videos| 色婷婷综合五月| 久久精工是国产品牌吗| 1024成人网| 精品理论电影在线观看| 一本久道久久综合中文字幕 | 一区二区三区精品视频| 精品国产一区二区在线观看| 久久99精品国产麻豆婷婷洗澡| 国产精品成人免费精品自在线观看| 欧美人妇做爰xxxⅹ性高电影| 国产精品一区2区| 亚洲成人av一区| 国产精品毛片a∨一区二区三区| 91精品国产综合久久久蜜臀图片| 国产成人免费视频网站| 蜜桃一区二区三区在线观看| 亚洲男帅同性gay1069| 欧美国产日本视频| 精品理论电影在线观看| 欧美日韩高清在线| 色婷婷一区二区| 91丨porny丨国产|