我有一个问题,我有一个简单的订阅者和简单的发布者,它们看起来像:
public async Task SendRequest()
{
var topic = "SomeTopic";
var requestHash = Helpers.ReturnUniqueKey(DateTime.Now, topic);
requestKeys.Add(requestHash);
Console.WriteLine($"Key count {requestKeys.Count}");
var responseHandler = new Action<ResponseMessage>(response =>
{
Console.WriteLine($"Key count {requestKeys.Count}");
foreach (var key in requestKeys)
{
Console.WriteLine($"Response { BitConverter.ToString(response.IdentyficationHash) } - Key { BitConverter.ToString(key) }");
if (!key.SequenceEqual(response.IdentyficationHash)) return;
requestKeys.Remove(key);
}
});
bus.Subscribe(BusController.ManualRequest, responseHandler, configuration => configuration.WithTopic(BusController.ManualRequest));
bus.Publish(someRequest, topic);
async Task WaitForItToWorkAsync()
{
var retry = 0;
var complete = false;
while (!complete)
{
if (retry >= 20) return ; // Ill ass some msg leater
complete = !requestKeys.Contains(requestHash);
retry += 1;
await Task.Delay(1000);
}
return // Ill ass some msg leater
}
await WaitForItToWorkAsync()
}
主要想法是我通过一些请求向某些服务发送消息并等待到达(我知道我可以使用 rpc,但可以有任何服务并且 rpc 不支持主题),这条路径有效,问题是 requestKeys HashSet 它类中的一个字段
private readonly HashSet<byte[]> requestKeys;
正如您在每个方法调用中看到的那样,我将 Key 添加到该字段,如果我发出第一个请求,它可以正常工作,但其他请求不会更新此密钥集合,我的意思是在 Action 之外它会更新,但在它之外是一个问题。我能做什么来解决这个问题?
Smart猫小萌
相关分类