问题描述
我正在处理旧版应用程序。该应用程序使用基于异步消息的协议与其他服务进行通信(使用Rabbitmq),我想为某些客户端开发同步Rest API。我想为此开发包装器或适配器,但无法更改旧版应用程序。
由于消息具有唯一的密钥,使用诸如密钥字典和信号量(或诸如SemaphoreSlim等之类的东西)之类的同步消息是否合理? 将请求键和信号量添加到字典中,然后等待出队过程释放该信号量。 像这样的东西:
ConcurrentDictionary<string,SemaphoreSlim> Collection { get; set; }
在请求过程中:
var handle = new SemaphoreSlim(0,1);
Collection.GetorAdd(key,handle);
等待响应:
await Task.Factory.StartNew(() => handle.WaitOne(timeout));
最后,在出队过程中释放信号灯:
if (Collection.TryRemove(key,out SemaphoreSlim semaphore))
{
semaphore.Release();
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)