我目前正在運行一個Parallel.ForEach
循環,其中包含一個while
循環。C# - Parallel.ForEach循環在嵌套while循環停止後不會停止
那些將被運行直到一個條件取消他們。正如你將看到的while循環只有在有效的響應將userChanged
布爾值設置爲true時纔會運行。
我的問題:loopState.Break();
代碼似乎
不停止Parallel.ForEach
循環。我究竟做錯了什麼?該userChanged
布爾設置爲true
後,功能將跳回以下行:
Parallel.ForEach(dataGridView1.Rows.Cast<DataGridViewRow>(), (row, loopState) =>
,並重新啓動代碼。我讚賞任何形式的建議和幫助!
示例代碼:
private void function()
{
Parallel.ForEach(dataGridView1.Rows.Cast<DataGridViewRow>(), (row, loopState) =>
{
try
{
// HttpWebRequest
bool userChanged = false;
while (!userChanged)
{
try
{
WebClient client1 = new WebClient
{
Proxy = null
};
client1.Headers["Accept-Language"] = "en-us";
if (client1.DownloadString("https://url.com/" + row.Cells[0].Value.ToString()).Contains("Sorry, that page doesn’t exist!"))
{
if (!userChanged)
{
// Request
if (/* condition is true */)
{
MessageBox.Show("Success", "Info", MessageBoxButtons.OK);
userChanged = true;
requestStream.Close();
loopState.Break();
}
}
}
else
{
// Call another function
}
}
catch (WebException ex)
{
MessageBox.Show(ex.Message);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
});
}
[loopstate.Break(),loopState.Stop()和CancellationTokenSource.Cancel()]之間有什麼區別可能的副本(https://stackoverflow.com/questions/8818203/what-is-difference-between- loopstate-break-loopstate-stop-and-cancellationt) – Reniuz
我沒有看到任何CPU密集型的事情發生在這裏。似乎並不適合Parallel.ForEach。你有沒有考慮過使用異步/等待Task.WhenAll?你所做的只是進行網絡通話 –