我构建了一个服务,每隔几分钟就轮询我们 ASB 上的队列和主题。该代码有一个设置类的初始化部分,以及在调用类的某些函数的 cron 作业上运行的部分。
我面临的问题是,在运行它时,我在每次预定执行时都得到相同的计数。一旦我停止服务并重新运行它,我就会得到更新的数字。
我的解决方案是在每次计划运行时重新初始化所有内容。现在的问题是我需要添加一些功能,这不是一个选项。
以下是我试图尽可能简化的代码(仅用于主题):
代码的初始化看起来像
var nsmgr = NamespaceManager.CreateFromConnectionString("conn string");
var topics = nsmgr.GetTopics();
foreach (var topic in topics)
{
var subscriptions = nsmgr.GetSubscriptions(topic.Path);
foreach (var subscription in subscriptions)
{
someStaticListOfAlerts.Add(new Alert (subscription.Name,()=> (int)subscription.MessageCountDetails.ActiveMessageCount))
}
}
每隔几分钟调用一次的代码是
foreach (Alert a in someStaticListOfAlerts)
{
a.Refresh();
}
警报类的简化
public class Alert {
public Alert (string name, Func<int> count)
{
// set in local vars
}
public void Refresh()
{
Console.Write ($"{_name} - {_count()}");
}
}
这是 SubscriptionDescription 类的预期行为吗?在刷新 SubscriptionDescription 或订阅方面,我在 MSDN 上找不到太多信息,这让我相信每次调用 MessageDetails.Count 时它都应该返回最新的数字。
我究竟做错了什么?