所以我遇到了一个有趣的问题,当我使用PhysicalAddress类型的密钥时,我在C#Dictionary中获得了重复的密钥.这很有趣,因为它只发生在很长一段时间后,我无法在完全不同的机器上使用相同的代码在单元测试中重现它.我可以在Windows XP SP3机器上可靠地重现它,但只能让它一次运行几天,即使这样,它也只会发生一次.
下面是我正在使用的代码,下面是该部分代码的日志输出.
码:
private void ProcessMessages()
{
IDictionary<PhysicalAddress, TagData> displayableTags = new Dictionary<PhysicalAddress, TagData>();
while (true)
{
try
{
var message = incomingMessages.Take(cancellationToken.Token);
VipTagsDisappeared tagsDisappeared = message as VipTagsDisappeared;
if (message is VipTagsDisappeared)
{
foreach (var tag in tagDataRepository.GetFromTagReports(tagsDisappeared.Tags))
{
log.DebugFormat(CultureInfo.InvariantCulture, "Lost tag {0}", tag);
RemoveTag(tag, displayableTags);
}
LogKeysAndValues(displayableTags);
PublishCurrentDisplayableTags(displayableTags);
}
else if (message is ClearAllTags)
{
displayableTags.Clear();
eventAggregator.Publish(new TagReaderError());
}
else if (message is VipTagsAppeared)
{
foreach (TagData tag in tagDataRepository.GetFromTagReports(message.Tags))
{
log.DebugFormat(CultureInfo.InvariantCulture, "Detected tag ({0}) with …Run Code Online (Sandbox Code Playgroud)