видя это решение, указанное в Divide Foreach into threads sampleвыполняющиеся задачи паралельно в asp.net
Я пытался реализовать его с помощью этого кода:
foreach (Object vo in arrreclist)
{
msg = String.Empty;
objprocess.GetType().GetMethod("ProcessRecord").Invoke(objprocess, new Object[] { vo });
status = (StatusInfo)objprocess.GetType().GetProperty("status").GetValue(objprocess, null);
if (status.errcode != 0)
{
lngfailedcnt++;
WriteErrorLog();
}
else
{
lngsuccesscnt++;
lngInstanceSuccCount++;
}
lngcnt++;
if ((lngcnt % 10) == 0)
{
if (instanceId == 0)
{
schldr.ModifyJobhistoryForUploadFileRecCnt(Runid, (int)lngTotreccnt, lngfailedcnt, (int)(lngfailedcnt + lngsuccesscnt));
}
else
{
schldr.ModifyJobhistoryForUploadFileRecCnt(Runid, 0, lngfailedcnt, (int)(lngfailedcnt + lngsuccesscnt));
}
status = schldr.status;
if (status.errcode != 0)
{
if (!String.IsNullOrEmpty(Errorlogfile))
WriteErrorLog();
holdInstance = true;
break;
}
//Get Job Status
//If job was terminated then Update Batch and Job history with status as STOPPED
intstatus = schedulersvc.GetJobStatus(Runid);
status = schedulersvc.status;
if (status.errcode != 0)
{
WriteErrorLog();
holdInstance = true;
break;
}
if (intstatus == 1) //STOPPED
{
holdInstance = true;
break;
}
lngcnt = 0;
}
}
И сообщение об ошибке наступающем для постановки излома:
не может покинуть тело анонимного метода или выражения лямбда
Моя главная задача состоит в том, чтобы распараллелить следующую строку:
objprocess.GetType().GetMethod("ProcessRecord").Invoke(objprocess, new Object[] { vo })
Но другие иждивенцы, так как реализовать?
Прежде всего, почему вы используете Reflection? Вместо этого, почему бы вам не определить интерфейс & Use Parallel.ForEach –
Ваша ошибка не совпадает с кодом, который вы отправили: я не вижу там никаких лямбдов. – svick
Кроме того, когда вы говорите, что хотите распараллелить только эту строку, означает ли это, что остальная часть цикла не может работать параллельно? – svick