我需要将foreach
转换为Parallel.foreach
,任何人都可以帮助我吗?
foreach (DataRow row2 in DT.Rows)
{
try
{
bool check = (urlcheck(dataGridView.Rows[i].Cells[2].Value.ToString()));
if (check == true)
ExecuteQuery("");
else
ExecuteQuery("");
}
catch{ }
i++;
}
答案 0 :(得分:3)
我会使用Parallel.ForEach
的重载,因此您的i
参数由foreach方法提供:
Parallel.ForEach(DT.Rows.OfType<System.Data.DataRow>(), (DataRow row2, ParallelLoopState loopState, long i) =>
{
try {
bool check = (urlcheck(dataGridView.Rows[(int)i].Cells[2].Value.ToString()));
if (check == true)
ExecuteQuery("");
else
ExecuteQuery("");
}
catch{ }
});
对于OfType<>
方法,您需要将using System.Linq
添加到使用语句中。
现在索引(i
)由方法调用自动分配,因此您不必担心i
的线程安全。
答案 1 :(得分:-1)
Parallel.ForEach(DT.Rows, row2 => {
try
{
bool check = (urlcheck(dataGridView.Rows[i].Cells[2].Value.ToString()));
if (check == true)
ExecuteQuery("");
else
ExecuteQuery("");
}
catch { }
i = i++;
});
请记住:如果以错误的方式使用,i = i++;
外部线程可能是dangroous。 (顺便说一句:奇怪的分配)
答案 2 :(得分:-2)
Parallel.ForEach(DT.Rows, Row =>
{
try
{
bool check = (urlcheck(dataGridView.Rows[i].Cells[2].Value.ToString()));
if (check == true)
ExecuteQuery("");
else
ExecuteQuery("");
}
catch() {}
i = i++;
});