gpt4 book ai didi

c# - 我需要在 ASP.NET Core WebAPI 中调用 TopicClient.CloseAsync() 吗?

转载 作者:行者123 更新时间:2023-12-03 05:43:00 25 4
gpt4 key购买 nike

我正在使用 Microsoft.Azure.ServiceBus 包。由于我应该重用 TopicClient 来充分利用 AMQP/SBMP,因此我将在我的单例服务之一中创建它。但是,TopicClient 不是 IDisposable,它仅公开方法 CloseAsync

我该怎么办?我是否需要在我的上下文中调用此方法?文档对此并不太清楚。

https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.servicebus.topicclient?view=azure-dotnet#methods

Closes the Client. Closes the connections opened by it.

这是我当前的草稿:

        public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(sp => new MyService());
...


public sealed class MyService: IDisposable
public void Dispose()
{
_TopicClient.CloseAsync().GetAwaiter().GetResult();
}

PS:我只是在主题中添加消息,没有其他内容。

最佳答案

基本上规则是这样的:

如果你打开它,你应该关闭它。但是:

  • 如果实现了 IDisposable,这通常是隐式完成的
  • 某些 IDisposables 如果保持事件状态 (HttpClient),效果会更好
  • 打开和关闭花费了大量时间
  • 这是相对于生命周期范围而言的。

所以,

由于您有一个单例(应用程序生命周期范围),因此您应该保持它打开,除非遇到问题。

除此之外,一般来说,总线连接通常始终保持开放状态。

最好在应用程序退出时关闭它,但即使这样也不是强制性的。

旁注:单例中的主题客户端可能不是线程安全的。我会仔细检查一下。

<小时/>

那么您什么时候会关闭此总线连接?

在某些情况下,您可能希望显式调用关闭。

例如:- 您的连接不稳定(卫星或长波 radio )。在这种情况下,如果您时不时地发送,您可能需要打开、发送和关闭。- 您的总连接数已达到最大值。- 如果您以非常低的间隔发送某些内容(例如每小时一次,那么它只会节省一些资源)- 大量并发任务(如果客户端不是线程安全的)

还有更多,但它始终取决于用例。记住这一点是一件好事,如果您遇到问题,可能是由于仅使用一个连接造成的。

关于c# - 我需要在 ASP.NET Core WebAPI 中调用 TopicClient.CloseAsync() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57176670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com