我有一个使用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);
}
}
可以为要向其发送数据的每个EventHub实例化类EventHubSender
,并且可以SendMessage
次调用n
方法。我想关闭客户端实体,但不想依赖开发人员来调用关闭它的方法。
如果我不确定EventHubClient
的位置,无论是托管对象还是非托管对象,我都认为这是问题的一部分。我已阅读this来尝试理解,并查看了答案here,但我认为针对Azure的这种特定情况仍然值得怀疑。