parallel類定義了for、foreach和invoke的靜態方法。parallel類使用多個任務,因此使用多個執行緒來完成這個作業。
parallel.for()方法類似於c#的for迴圈語句,也是多次執行乙個任務。使用parallel.for方法,可以並行執行迭代。迭代的順序沒有定義。
parallel.for(0, 10, i =>, task:, thread:", i, task.currentid, thread.currentthread.managedthreadid);
});//從結果可以看出,順序是不能保證的。
也可以提前中斷for方法。for()方法的乙個過載版本接受第三個action型別的引數。使用這些引數定義乙個方法,就可以呼叫parallelloopstate的break()或stop()方法,以影響迴圈的結果。
parallelloopresult result =parallel.for(0, 10, (int i, parallelloopstate pls) =>, task:, thread:
", i, task.currentid, thread.currentthread.managedthreadid);
thread.sleep(
10);
if (i > 5
) pls.break();//盡早停止,並沒有實現立即停止
});console.writeline(
"result.iscompleted
", result.iscompleted);
console.writeline(
"result.lowestbreakiteration
", result.lowestbreakiteration);
parallel.for方法可能使用幾個執行緒來執行迴圈,如果需要對每個執行緒進行初始化,就可以使用parallel.for()方法。出了from和to對應的值外,還接受三個委託引數。
parallel.for(0, 10, () =>, task", thread.currentthread.managedthreadid, task.currentid);
return
string.format("t"
, thread.currentthread.managedthreadid);
},(i, pls, str1) => str1 thread task
", i, str1,
thread.currentthread.managedthreadid, task.currentid);
thread.sleep(
10);
return
string.format("i "
, i);
},(str1) =>
", str1);
});
parallel.foreach方法遍歷實現了ienumerable的集合,其方式類似於foreach語句,但以非同步方式遍歷。這裡也沒有確定遍歷順序。
string arr = ;parallel.foreach
(arr, value =>console.writeline(value));
parallel.foreach
(arr, (value, pls, k) =>,
", value, k);
if (value == "
kkk"
) pls.stop();
});
如果多個任務應並行執行,就可以使用parallel.invoke方法。
publicstatic
void invoke(params
action actions);
public
static
void invoke(paralleloptions paralleloptions, params action actions);
多執行緒系列(四) Task
目錄 一 為什麼使用任務 執行緒池已經可以讓我們簡單地建立執行緒,並優化了效能。但是,執行緒池的缺點在於,我不清楚我的操作什麼時候完成,也不能收到返回值,因為委託是沒有返回值的。所以任務就出現了,它可以完成執行緒池能夠完成的任務。system.threading.tasks 命名空間二 任務 我們使...
C 多執行緒系列
個人感覺c 的程式設計,除了對演算法和類庫的使用以外,達到一定的水平以後,多執行緒的使用將會成為乙個很大的瓶頸。所以重新花費時間讀了一本書 net 4.0物件導向程式設計漫談 應用篇 裡面關於多執行緒的描述。自己做了乙個讀書筆記,把多執行緒部分的要點進行了梳理,並且適當的加上了一些自己的測試和理解。...
c 多執行緒(四)
執行緒間通訊 主線程建立子執行緒必定會為主執行緒分擔一部分工作,這樣不可避免的會在這兩個執行緒之間存在訊息傳遞渠道,因此主線程和子執行緒之間要進行通訊。下面介紹幾種通訊方式 全域性變數 由於同一程序的各個執行緒之間共享該程序的資源,因此,解決執行緒間通訊最簡單的方式是使用全域性變數。對於標準型別的全...