Использование финализатора, чтобы закрыть EventHubClient - PullRequest
0 голосов
/ 06 июля 2018

У меня есть класс, который использует EventHubClient (Microsoft.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);
    }
}

Класс EventHubSender может быть создан для каждого EventHub, в который я хочу отправить данные, и метод SendMessage может быть вызван n раз. Я хочу закрыть клиентскую сущность, но не хочу, чтобы разработчик вызывал метод для ее закрытия.

Я думаю, что часть проблемы, если я не уверен, где находится EventHubClient, является ли это управляемым или неуправляемым объектом. Я прочитал этот , чтобы попытаться понять, а также посмотрел ответы здесь , но я думаю, что этот конкретный случай для Azure все еще требует вопроса.

...