我有一个无法调试的奇怪问题。这是一个解析信息的委托:
Action<XElement, String> ParseXMLInfo = (s, t) =>
{
using (var Ctx = new Entities())
{
var Records = s.Elements("record");
Parallel.ForEach(
ParallelEnumerable.Range(0, Records.Count()),
u =>
{
var el = Records.ElementAt(u);
try
{
var NTR = new tbl_UserInfo();
NTR.first_name = el.Element("first_name").Value;
NTR.last_name = el.Element("last_name").Value;
Ctx.AddTotbl_UserInfo(NTR);
}
catch (Exception excp)
{
Console.WriteLine(System.DateTime.Now + " " + excp.Message);
}
}
);
Ctx.SaveChanges();
}
};
委托本身被调用两次,如下所示:
Parallel.Invoke(
() =>
{
var XMLDoc_MaleInfo = XElement.Load("MaleNames.xml");
Console.WriteLine("Fetching records from MaleNames.xml; starting at " + System.DateTime.Now);
ParseXMLInfo(XMLDoc_MaleInfo, "male");
},
() =>
{
var XMLDoc_FemaleInfo = XElement.Load("FemaleNames.xml");
Console.WriteLine("Fetching records from FemaleNames.xml; starting at " + System.DateTime.Now);
ParseXMLInfo(XMLDoc_MaleInfo, "female");
}
);
一切似乎都运行正常。特别是,Parallel.ForEach
委托的部分运行没有任何错误。但是随后,代码在该行中断Ctx.SaveChanges ()
,并显示消息
你调用的对象是空的。
但是当我将鼠标悬停在Ctx
(处于这种破碎状态)时,Ctx
不会显示为null
.
有人可以告诉我发生了什么吗?