使用终结器关闭EventHubClient

时间:2018-07-06 10:59:24

标签: c# azure finalizer

我有一个使用EventHubClientMicrosoft.Azure.EventHubs)连接到Azure EventHub的类。我在类上使用了一种将事件发送到EventHub的方法,完成后,我想关闭与事件中心的连接。使用终结器是这种情况吗?

using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.EventHubs;

public class EventHubSender
{
    private readonly string hubName;
    private readonly string connectionString;
    private readonly EventHubClient eventHubClient;

    public EventHubSender(string hubName, string connectionString)
    {
        this.hubName = hubName;
        this.connectionString = connectionString;

        // Create client
        var connectionStringBuilder = new EventHubsConnectionStringBuilder(this.connectionString)
        {
            EntityPath = this.hubName
        };
        this.eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
    }

    ~EventHubSender()
    {
        // Close the client
        this.eventHubClient.Close();
    }

    public async Task SendMessage(string value)
    {
        // Create the data
        var eventData = new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)));

        // Send message
        await this.eventHubClient.SendAsync(eventData);
    }
}

可以为要向其发送数据的每个EventHub实例化类EventHubSender,并且可以SendMessage次调用n方法。我想关闭客户端实体,但不想依赖开发人员来调用关闭它的方法。

如果我不确定EventHubClient的位置,无论是托管对象还是非托管对象,我都认为这是问题的一部分。我已阅读this来尝试理解,并查看了答案here,但我认为针对Azure的这种特定情况仍然值得怀疑。

0 个答案:

没有答案