デバッグできない奇妙な問題があります。情報を解析するデリゲートは次のとおりです。
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();
}
};
デリゲート自体は、次のように 2 回呼び出されます。
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
。
誰かが何が起こっているのか教えてもらえますか?