• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    一些.NET對多線程異常處理技巧分享

    來源:懂視網 責編:小采 時間:2020-11-27 22:43:17
    文檔

    一些.NET對多線程異常處理技巧分享

    一些.NET對多線程異常處理技巧分享:多線程環境 在我們的產品 SE 中,出現多線程的地方主要有兩大類,一類是通過 ThreadPool 或 new Thread 主動發起多線程,另一類是 Socket 通訊回調。 多線程異常捕獲 對于一般的異常處理來說,我們只要簡單的將可能出錯的語句包含在 try/catch 語
    推薦度:
    導讀一些.NET對多線程異常處理技巧分享:多線程環境 在我們的產品 SE 中,出現多線程的地方主要有兩大類,一類是通過 ThreadPool 或 new Thread 主動發起多線程,另一類是 Socket 通訊回調。 多線程異常捕獲 對于一般的異常處理來說,我們只要簡單的將可能出錯的語句包含在 try/catch 語

    多線程環境
    在我們的產品 SE 中,出現多線程的地方主要有兩大類,一類是通過 ThreadPool 或 new Thread 主動發起多線程,另一類是 Socket 通訊回調。
    多線程異常捕獲
    對于一般的異常處理來說,我們只要簡單的將可能出錯的語句包含在 try/catch 語句中即可。我也曾經簡單的將該方法運用于多線程的異常捕獲,結果并非如此,代碼如下:
    代碼如下:


    public static void Main()
    {
        try
        {
            new Thread (Go).Start();
        }
        catch (Exception ex)
        {
            // 永遠執行不到這兒!
            Console.WriteLine ("Exception!");
        }
    }
    private static void Go()
    {
        throw null;
    }

    正確的做法應該是在新線程入口方法 Go 中捕獲異常:
    代碼如下:

    public static void Main()
    {
        new Thread (Go).Start();
    }
    private static void Go()
    {
        try
        {
            ...
            throw null; // 該異常將會被捕獲
            ...
        }
        catch (Exception ex)
        {
            // 異常日志記錄,或者通知其他線程出現異常了
            ...
        }
    }

    以上的正確做法來自 Threading in C# 中的小節 Exception Handling,該文涉及到 .NET 多線程的方方面面,是我看到最全最好的文章。

    正確捕獲多線程異常的方法找到了,接下來我們自然會想:是不是每個線程入口方法都得這么做?

    且看 Threading in C# 中的小節 Exception Handling 的描述:從 .NET 2.0 開始,任何一個線程上未處理的異常都會導致整個應用程序關閉。因此,在每個線程入口方法中都必須要使用 try/catch 語句,至少在產品應用程序中必須如此,以免應用程序因為我們未預料到的代碼而關閉整個應用程序。

    如果僅僅記下異常信息而不在乎應用程序異常關閉,那么有兩個方法可以做到:

      1、對于 Windows Form 程序來說,有一個全局異常處理事件:Application.ThreadException;

      2、對于所有 .NET 程序來說,還有一個更低級的全局異常處理事件:AppDomain.UnhandledException;
    更高的要求
    我們能簡單的通過全局異常處理事件來記錄錯誤日志;如果保證不中斷應用程序,也可以在每個線程入口方法中捕獲異常并記錄異常日志。有沒有辦法做到:既能捕獲異常且不中斷應用程序,又能如全局異常處理事件那樣簡單捕獲異常?
    對于主動創建的新線程,至少可以做到這一點:
    代碼如下:


    public static class ThreadExecutor
    {
        public static bool Execute(System.Threading.WaitCallback callback, object state)
        {
            try
            {
                return System.Threading.ThreadPool.QueueUserWorkItem(callback, state);
            }
            catch (Exception e)
            {
                // log the exception
            }
            return false;
        }
    }

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    一些.NET對多線程異常處理技巧分享

    一些.NET對多線程異常處理技巧分享:多線程環境 在我們的產品 SE 中,出現多線程的地方主要有兩大類,一類是通過 ThreadPool 或 new Thread 主動發起多線程,另一類是 Socket 通訊回調。 多線程異常捕獲 對于一般的異常處理來說,我們只要簡單的將可能出錯的語句包含在 try/catch 語
    推薦度:
    標簽: 方法 處理 技巧
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久久久久久亚洲精品| 久热这里只有精品99国产6| 97精品国产97久久久久久免费| 无码精品人妻一区| 午夜精品福利视频| 青青草原精品国产亚洲av| 国产伦精品一区二区三区视频猫咪| 国产精品美女一区二区视频| 亚洲国产精品不卡毛片a在线| 四虎最新永久在线精品免费| 久久九九精品99国产精品| 无码国内精品久久人妻麻豆按摩| 国产成人毛片亚洲精品| 国产成人精品无码一区二区| 亚洲精品无码乱码成人| 久久99精品国产99久久6| 91午夜精品亚洲一区二区三区| 97久久精品无码一区二区| 无码人妻精品一区二区三区东京热 | 日韩精品成人a在线观看| 97久久精品人人做人人爽| 国产亚洲综合成人91精品| 国产精品v片在线观看不卡| 日产精品久久久久久久性色| 亚洲一区无码精品色| 青青久久精品国产免费看| 精品国产一区二区三区在线观看| 在线观看日韩精品| 日韩精品在线一区二区| 精品久久久久久亚洲| 2021精品国产综合久久| 精品欧洲av无码一区二区三区| 日韩人妻无码精品一专区| 亚洲AV无码成人精品区在线观看| 亚洲精品无码你懂的网站| 国产成人精品2021| 日韩精品少妇无码受不了| 亚洲AV永久无码精品成人| 少妇人妻偷人精品视频| 久久精品99久久香蕉国产色戒 | 国产精品一级片|