KeyLocks
1.0.0
قم بتشغيل الرمز مع الأقفال بناءً على أنواع كائنات مختلفة ، مثل السلاسل والأرقام والتواريخ.
قفل الرمز بشكل انتقائي على قيم محددة ، وليس عالميا لجميع التعليمات البرمجية التنفيذ.
private static KeyLock<string> _keyLock = new KeyLock<string>();
public void Main()
{
Parallel.Invoke(
() => { UpdateData("entity-123", "First new value"); },
() => { UpdateData("entity-123", "Second new value"); }, // This will await line above
() => { UpdateData("another-entity-456", "Another new value"); },
() => { UpdateData("yet-another-entity-789", "Yet another new value"); });
}
private void UpdateData(string id, string value)
{
_keyLock.RunWithLock(id, () =>
{
// Execute locked code
});
}
تم تنفيذ الطريقة 1 و 2 التي تم تنفيذها داخل Parallel.Invoke سوف تنتظر بعضها البعض ، والتي تقوم بتنفيذ UpdateData -method ، ولا تعمل بشكل متزامن ، بينما سيتم تشغيل كل شيء آخر بالتوازي.
نوع NameLock هو مصطلح قصير ل KeyLock<string> .
إنه افتراضي إلى أن تكون حساسًا للحالة ، ولكن يمكن تغييرها عن طريق تمرير StringComparer.InvariantCultureIgnoreCase باعتبارها حجة مُنشئًا.