C#中 foreach最好不要用在多線程中

來源:互聯網
上載者:User

 

最近碰到一個問題,需要對一個數組的每個元素線上程上操作,使用了如下的代碼:

      private void ForeachThread(int[] arr)
        {
            foreach (int a in arr)
            {
                new Thread(delegate() { Console.WriteLine("fe: " + a); }).Start();
            }
        }
       
        結果有的內容沒有輸出來,有的內容卻重複輸出
       
        後來換成了 如下代碼

        private void ForThread(int[] arr)
        {
            for (int i = 0, len = arr.Length; i < len; i++)
            {
                int a = arr[i];
                new Thread(delegate() { Console.WriteLine(a); }).Start();
            }
        }
       
       
        達到了預期目的.
       
        沒有去查看foreach的具體實現方式,但是在這裡提個醒,如果需要使用多線程的話,盡量以免使用foreach, foreach可能不是安全執行緒的
        for是不是安全執行緒的,不得而知,不過就例子而言,應該是安全執行緒的.
       
        我也不知道如何去檢驗代碼是不是安全執行緒,有知道的朋友,可以告訴我一下,謝謝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.