У меня есть класс, который использует 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 все еще требует вопроса.