我有以下类来管理对资源的访问:
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个)?
答案 0 :(得分:3)
&#34;每秒20次&#34;与&#34; 20完全不同的是#34;。我建议您保留线程同步,并使用更高级别的抽象,能够更自然地将时间作为一个概念。
特别是,Reactive Extensions有许多不同的限制运算符。
答案 1 :(得分:0)
这是一个基本的重新实现,在指定的时间段过去时会调用Semaphore.Release
,或{em>(可选 - 请参阅Dispose()
中的代码注释) {{1}实例被处理掉了。
Sync