[英]Parallel.ForEach - Thread Safety with Nested Instance Objects
在這種情況下,Employee和/或Illness實例是否是線程安全的? 每個線程都有自己的對象副本嗎? 最初我認為每個線程都有自己的副本,但現在我不確定。
Parallel.ForEach(line01s, _options, o =>
{
var employee = new Employee();
// set values on employee...Safe?
var illness = new Illness();
// set values on illness...Safe?
employee.AddIllness(illness); // Illness is a property on Employee
}
是否可以在錯誤的Employee對象上設置Illness對象? 我是否需要在employee.AddIllness(疾病)周圍添加鎖定; ? 我使用這個TPL的東西越多,我發現我就越不理解
您的示例僅適用於在lambda表達式范圍內創建的對象,因此您無需擔心。 如果你正在修改lambda塊之外的對象的狀態,那么你需要擔心鎖定等。
如果您在員工集合中迭代Parallel.ForEach ,或在lambda中創建新員工,那么沒有什么可擔心的。 每個lambda調用完全獨立於其他調用(如果閉包中沒有外部變量)。
如果員工集合有重復或處理更復雜,那么您將不得不使用一些同步代碼 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.