gpt4 book ai didi

c# - Parallel.ForEach 错误 HttpContext.Current

转载 作者:太空狗 更新时间:2023-10-29 17:31:58 25 4
gpt4 key购买 nike

此方法 - doDayBegin(item.BranchId) 需要很长时间才能执行。所以我使用 Parallel.ForEach 并行执行它。当我使用普通的 foreach 循环时它工作正常但是当我使用 Parallel.ForEach 时它显示这个错误
对象引用未设置到对象的实例。

 public ActionResult Edit([DataSourceRequest] DataSourceRequest request)
{
try
{
JavaScriptSerializer js = new JavaScriptSerializer();
List<DB0010020Vm> _listDB0010020Vm = new List<DB0010020Vm>();

string dataDB0010020vm = Request.Form["griddetailsvm"];
if (!string.IsNullOrEmpty(dataDB0010020vm))
{
_listDB0010020Vm = js.Deserialize<List<DB0010020Vm>>(dataDB0010020vm).
Where(d => d.IsValid == "YES").ToList();
}
DateTime start = DateTime.UtcNow;


Parallel.ForEach(_listDB0010020Vm, item =>
{
doDayBegin(item.BranchId);
});

DateTime end = DateTime.UtcNow;
TimeSpan duration = end - start;
return Json(new
{
success = true,
message = "Day Begin Process Completed Successfully!" + duration
});
}
catch (Exception e)
{
return Json(new
{
success = false,
message = e.Message
});

}
}

public void doDayBegin(int BranchId)
{
var httpContext = System.Web.HttpContext.Current;
IDB0010020Repository _idDB0010020Repository = new DB0010020Repository();
IDB0010044Repository _idDB0010044Repository = new DB0010044Repository();

EBS.DAL.Model.DB0010020 branchDetails = _idDB0010020Repository.FindOne(d => d.BranchId == BranchId);
if (branchDetails == null)
{
ModelState.AddModelError("", "Branch not found!");
}
else
{
try
{
DateTime LastOpenDate = DateTime.ParseExact(Request.Form["LastOpenDate"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
// branchDetails.LastOpenDate = LastOpenDate;
// branchDetails.LastOpenDate = Convert.ToDateTime(Request.Form["LastOpenDate"].ToString());


}
catch (Exception e)
{
// branchDetails.LastOpenDate = Convert.ToDateTime("2014-07-25 00:00:00.000");
}


OperationStatus status = _idDB0010020Repository.UpdateAndSave(branchDetails);
if (status != null && !status.Status)
ModelState.AddModelError("Updation failed", status.ExceptionMessage);
}

EBS.DAL.Model.DB0010044 dayBegin = new DB0010044();
dayBegin.BankId = 1;
dayBegin.BranchId = BranchId;
dayBegin.DayBeginFlag = 1;
//added d
DateTime DayDate = DateTime.ParseExact(Request.Form["LastOpenDate"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
dayBegin.DayDate = DayDate;
//added d

// dayBegin.DayDate = Convert.ToDateTime(Request.Form["LastOpenDate"]);
dayBegin.DayEndFlag = 0;
dayBegin.DayEndStage = 1;
dayBegin.DayReopenFlag = 0;
OperationStatus status2 = _idDB0010044Repository.AddAndSave(dayBegin);
if (status2 != null && !status2.Status)
ModelState.AddModelError("Updation failed", status2.ExceptionMessage);
else
{
CreateInwardSessionsForBranch(BranchId);
CreateOutwardSessionsForBranch(BranchId);
}

}


这是错误 this error i am getting

会出现什么问题?为什么我的 session 为空。有什么办法可以解决

最佳答案

HttpContext.Current 是按线程设置的。因此,当您使用 Parallel.ForEach 启动更多线程时,您的新线程无法以这种方式访问​​它。解决方案是将所需的值作为参数一直传递,而不是依赖存储库中的 HttpContext.Current

SO 上有几个来源已经涵盖了这个问题。

The cross-thread usage of "HttpContext.Current" property and related things

HttpContext.Current.Items in different thread

Access HttpContext.Current from different threads

关于c# - Parallel.ForEach 错误 HttpContext.Current,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26710980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com