C# for循環創建多線程


這里僅討論Task多線程編程,不討論其他可以使用多線程的情況,比如Beginxxx,Thread等

一般情況下,如果有多個線程需要同是啟動,且每個線程中使用了集合collection中的序號。

比如參數中帶數組中的一個數據,比如:

int[] nArray = new int[] {0,1,2,3};

然后需要用多線程的方式,同時處理其中的每個數據。

如果你寫成,下面這種方式:

Task[] taskArray = new Task[4];
for (int i=0; i < 4; i++)
{
      task[i] = Test(nArray[i]);
}

就會發現,拋出了數組越界的異常。

但是如果你改成:

Task[] taskArray = new Task[4];
for (int i=0; i < 4; i++)
{
      int n = i;
      task[n] = Test(nArray[n]);
}

就會發現,多線程運行正常了。

原因是什么呢?

第一個是因為,Task因為是新的語法糖,處理Task的時候,需要一定的時間,這個時間肯定是比for里面

i++;
i<4;

這兩句話要來的長的,所以等實際上生成四個Task,准備啟動的時候,就會發現,這個時候的i已經加到4了,自然就產生了越界。

第二個方法,能生效,是因為 n = i;將每個工作域中的i都賦予了局部變量n,這樣每個Task的參數即為局部變量n,就不會因為i的變化而變化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM