使用'using'会导致ObjectDisposedException创建EventData列表

时间:2016-01-14 07:24:58

标签: c# azure azure-eventhub

我通常按如下方式将数据发送到事件中心..

var encoded = Encoding.UTF8.GetBytes(serializedString);
using (var edata = new EventData(encoded) { PartitionKey = mypkey })
{
    edata.Properties[EventDataPropertyKeys.MyKey] = myvalue;
    await _eventclient.SendAsync(edata).ConfigureAwait(false);                        
}

今天我想尝试通过批处理发送数据并尝试创建一个EventData对象列表,如下所示。

List<EventData> eventDataList = new List<EventData>();

//in a loop
var encoded = Encoding.UTF8.GetBytes(serializedString);    
using (var edata = new EventData(encoded) { PartitionKey = mypkey })
{
    edata.Properties[EventDataPropertyKeys.MyKey] = myvalue;
    eventDataList.Add(edata);
}

但是当我检查eventdatalist对象时,我发现EventData对象的SerializedSizeInBytes属性显示

'This eventdata instance has already been disposed'

并且在访问投掷时..

'eventData.SerializedSizeInBytes' threw an exception of type 'System.ObjectDisposedException'

真心感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:2)

因为在第一个代码段中,您在edata块内发送了using。但是在第二个代码段中,您将edata放入列表中,然后循环遍历列表并在using块之后发送每个项目,其中项目edata已经处理完毕。