簡體   English   中英

resetAbort是做什么的?

[英]What does resetAbort do?

嗨,我有以下測試代碼:

class Program
{
    static void Main(string[] args)
    {
        Thread t = new Thread(Work);
        t.Start();
        Thread.Sleep(1000);
        t.Abort();
        Thread.Sleep(1000);
        t.Abort();
        Thread.Sleep(1000);
        t.Abort();
        t.Join();
        Console.WriteLine("End");
    }

    static void Work()
    {
        int i = 0;
        while (i<10)
        {
            try
            {
                while(true);
            }
            catch(ThreadAbortException)
            {
                Thread.ResetAbort();
            }

            Console.WriteLine("I will come back!");
            i++;
        }
    }
}

每次中止時,都會執行Thread.ResetAbort()。 我不知道此ResetAbort會做什么。 因為當我運行它時,我看到了以下輸出:我會回來的! 我會回來! 我會回來! 而且我沒有看到輸出“ End”-看來該程序根本沒有結束。 你知道為什么嗎? 謝謝!

它取消中止線程的請求。 如此處所示。 因此,在這種情況下,循環將繼續進行,線程仍應處於活動狀態。

其他人對ResetAbort的回答是正確的。 之所以不輸出“ End”,是因為t.Join()從不返回。 這是因為您的線程僅被嘗試中止3次,並且您的循環在無限循環中包含10次嘗試。 當目標線程完成其委托運行,而您的委托未完成時, Join返回。

ResetAborts取消線程的中止請求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM