定时信号量

ale*_*xey 5 .net c# synchronization semaphore

我有以下类来管理对资源的访问:

class Sync : IDisposable
{
    private static readonly SemaphoreSlim Semaphore = new SemaphoreSlim(20);

    private Sync()
    {
    }

    public static async Task<Sync> Acquire()
    {
        await Semaphore.WaitAsync();
        return new Sync();
    }

    public void Dispose()
    {
        Semaphore.Release();
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

using (await Sync.Acquire())
{
    // use a resource here
}
Run Code Online (Sandbox Code Playgroud)

现在它允许不超过 20 个共享用法。

如何修改此类以允许每单位时间不超过 N 次共享使用(例如,每秒不超过 20 次)?

Ste*_*ary 3

“每秒 20 个”与“一次 20 个”完全不同。我建议您放弃线程同步,并使用能够更自然地将时间作为概念工作的更高级别的抽象。

特别是,Reactive Extensions有许多不同的节流运算符。