c# - 定时信号量

标签 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 次)?

最佳答案

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

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

关于c# - 定时信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24311548/

相关文章:

c# - 锁定/并发问题

c# - 使用 Canvas 按钮加载场景

c# - 如何在(linq 和 lambda)中使用 select with max,min 函数?

c# - 枚举到 Int。整数到枚举。转换的最佳方式?

java - 同名嵌套锁

c# - ElasticSearch NEST 术语查询未返回结果

c# - SqlConnection,出现错误并且无法连接到数据库(发生在System.Data.dll中)

c# - 并行调试

c# - 等待任何线程完成,而不是全部

java - 同步块(synchronized block)中的更改何时对其他线程可见