واجهة برمجية قائمة على async/await. تتصل بخادم واحد، وتحجز مفتاحًا ثم تعيده فورًا.
var wait = TimeSpan.FromSeconds(5);
var lease = TimeSpan.FromSeconds(30);
await using var broker = TicketBroker.Connect(["127.0.0.1:5225"]);
await broker.WaitReadyAsync(TimeSpan.FromSeconds(5));
var ticket = await broker.AcquireAsync("key", wait, lease);
await ticket.ReleaseAsync();
Console.WriteLine("pass");مثال يتحقق من أن عدة مهام تُجري إيداعات وسحوبات متكررة عبر قفل خاص بكل حساب دون تعارض، وأن الرصيد يعود دائمًا إلى قيمته الأولية.
private async Task Transaction(int account, long delta)
{
var key = $"account-{account}";
Ticket ticket;
try
{
ticket = await _broker.AcquireAsync(key, Wait, Lease);
}
catch (Exception e)
{
_log.LogError($"account {account} acquire failed: {e.Message}");
return;
}
await using var _ = ticket; // إرجاع تلقائي في الخلفية عند مغادرة النطاق
var before = _balances[account];
await Task.Yield();
var after = before + delta;
_balances[account] = after;
var (action, sign) = delta < 0 ? ("withdraw", '-') : ("deposit", '+');
_log.LogInformation($"account {account} {action} {sign}${Amount} -> ${after}");
}راجع الأمثلة الكاملة في ExampleTest.cs, ExampleBankTest.cs, BenchTest.cs.