【发布时间】:2017-01-07 21:46:32
【问题描述】:
想看看你们中的某个人能否对此有所了解。 在下面的代码中已经添加了获取具有相同密钥的项目的异常:
foreach (EmailMessage m in findResultsSentItems)
{
em.Add(m);
}
lstMailContactDeatils.Clear();
Parallel.ForEach(em,
myItem =>
{
myItem.Load();
foreach (EmailAddress e in myItem.ToRecipients)
{
try
{
MailContactDeatils _MailContactDeatils1 = new MailContactDeatils();
_MailContactDeatils1.MailID = e.Address;
_MailContactDeatils1.DisplayName = e.Name;
_MailContactDeatils1.SentTime = myItem.DateTimeSent.ToString();
// if(lstMailContactDeatils.Contains())
lstMailContactDeatils.Add(_MailContactDeatils1);
}
catch (Exception e1) { exceptions.Enqueue(e1); }
}
foreach (EmailAddress e in myItem.CcRecipients)
{
try
{
MailContactDeatils _MailContactDeatils2 = new MailContactDeatils();
_MailContactDeatils2.MailID = e.Address;
_MailContactDeatils2.DisplayName = e.Name;
_MailContactDeatils2.SentTime = myItem.DateTimeSent.ToString();
lstMailContactDeatils.Add(_MailContactDeatils2);
}
catch (Exception e2) { exceptions.Enqueue(e2); }
}
});
LINQ 语句是我抛出 ArgumentExcpetion 的地方:已添加具有相同键的项目
【问题讨论】:
-
您是否在 MailContactDetails 中定义了自定义相等比较?
-
什么是
lstMailContactDeatils? -
lstMailContactDeatils 是 MailContactDeatils 类型的列表..... public class MailContactDeatils { public string DisplayName { get;放; } 公共字符串 MailID { 获取;放; } 公共字符串 SentTime { 获取;放; } }
-
您的代码未显示此处必不可少的部分。你如何与上下文交互?无论如何,您永远不应该从多个线程中处理一个上下文实例。这意味着:将
Parallel.ForEach替换为普通的foreach。 -
如果读取 500 条记录需要 那么 长,那么您的问题出在其他地方。不要试图通过并行化来修复糟糕的查询。
标签: c# linq list foreach parallel.foreach