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
});
}
Parallel.Invoke内で実行された方法1と2は、 UpdateData -Methodを実行しているが、互いに待ち望まれ、同時に実行されないのに対し、他のすべては並行して実行されます。
タイプのNameLockは、 KeyLock<string>の短い用語です。
デフォルトはケースに敏感であることになりますが、 StringComparer.InvariantCultureIgnoreCaseコンストラクター - argumentとして渡すことで変更できます。