async/await ভিত্তিক API। একটি সার্ভারে সংযুক্ত হয়ে একটি কী অর্জন করে সঙ্গে সঙ্গে ফেরত দেওয়া হয়।
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-এ দেখুন।