我有一个长时间运行的过程,它会唤醒,执行某些任务,并且可能需要通过MessageSender
将消息发布到Azure服务总线,也可能不需要。如果我可以使MessageSender
为单例,那会稍微简化我的代码,所以我想知道它是否可行。
为明确起见,我希望此过程可能会持续很长时间(至少几小时,可能几天),而不会向服务总线发送任何消息。
超级简化的示例:
public async Task WorkLoop(CancellationToken token)
{
while (!token.IsCancellationRequested)
{
var result = DoWork();
if (result.shouldPublish)
{
var message = buildMessage(result);
await _messageSender.SendAsync(message);
}
await Task.Delay(sleepDuration, token);
}
}
让MessageSender
实例长时间(至少几天,可能是几周或几个月)保持活动状态是否会产生后果?
答案 0 :(得分:3)
根据this guide:
建议您不要关闭消息传递工厂或排队, 主题和订阅客户端发送消息后,然后 在发送下一条消息时重新创建它们。 [...]您可以放心 将这些客户端对象用于并发异步操作,以及 来自多个线程。