KeyLocks
1.0.0
Jalankan kode dengan kunci berdasarkan jenis objek yang berbeda, seperti string, angka & tanggal.
Kode kunci secara selektif pada nilai -nilai tertentu, bukan secara global untuk semua kode pelaksanaan.
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
});
}
Metode 1 dan 2 dieksekusi di dalam Parallel.Invoke , yang mengeksekusi method UpdateData , akan menunggu satu sama lain dan tidak berjalan secara bersamaan, sementara semua yang lain akan berjalan secara paralel.
Jenis NameLock adalah istilah pendek untuk KeyLock<string> .
Default menjadi peka huruf besar-kecil, tetapi itu dapat diubah dengan melewati StringComparer.InvariantCultureIgnoreCase sebagai konstruktor-argumen.