定时信号量

时间:2014-06-19 16:20:18

标签: c# .net 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();
    }
}

用法:

using (await Sync.Acquire())
{
    // use a resource here
}

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

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

2 个答案:

答案 0 :(得分:3)

&#34;每秒20次&#34;与&#34; 20完全不同的是#34;。我建议您保留线程同步,并使用更高级别的抽象,能够更自然地将时间作为一个概念。

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

答案 1 :(得分:0)

这是一个基本的重新实现,在指定的时间段过去时会调用Semaphore.Release,或{em>(可选 - 请参阅Dispose()中的代码注释) {{1}实例被处理掉了。

Sync