背景
我有一个 Windows 服务使用 调用 REST Web 服务HttpWebRequest
,我正在使用BlockingCollection<T>
来实现生产者/消费者模式。每隔一段时间,我的 Web 服务就会返回502 Bad Gateway
或503 Service Unavailable
.
我有 95% 的把握网络服务刚刚被淹没。所以我想在收到这些响应之一时限制客户端的请求。
问题
我应该使用哪种类型的信号量?.Net 4/4.5 类型没问题。这是我提出的解决方案的伪代码,消费者并行运行:
class Worker {
Semaphore _cooldown = new Semaphore();
void Run() {
StartProducersInParallel();
StartConsumersInParallel();
}
void Produce() {...}
void Consume() {
_cooldown.Wait(1000);
try {
var response = proxy.GetResponse();
} catch (ex) {
if (ex.Status == 502 || ex.Status == 503) {
_cooldown.Signal();
// ... wait here and then retry once
}
}
}
}