menuTicketing
close





Ticketing C# लाइब्रेरी

GitHub

रिपोजिटरी

bash
powershell

उदाहरण

सरल उदाहरण

async/await आधारित API है। एक सर्वर से जुड़कर key अधिग्रहीत की जाती है और तुरंत रिलीज़ कर दी जाती है।

csharp
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");

समसामयिकता उदाहरण (वितरित लॉक)

कई टास्क खाता-वार लॉक से अन्योन्य बहिष्करण करते हुए जमा/निकासी को बार-बार दोहराएँ तो भी बैलेंस हमेशा शुरुआती मान पर लौटता है, इसकी पुष्टि करने वाला उदाहरण है।

csharp
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 में देखें।