У меня есть приложение, с помощью которого я загружаю и обрабатываю приблизительно 7800 URL-адресов, используя цикл Paraller.ForEach ().Использование этой техники позволило моему компьютеру завершить эту операцию примерно за 4,5 минуты (в среднем это занимает почти 28 минут).
Поскольку это выполняется внутри приложения WinForms, я позволяю пользователю «остановить» процесс раньше, просто нажав кнопку «стоп», которая, в свою очередь, установит для изменчивой логической переменной значение «false».В верхней части моего цикла Parallel.ForEach () я проверяю состояние этой переменной, и если для нее установлено значение «false», я просто вызываю метод ParallelLoopState.Stop ().Мой следующий блок кода внутри цикла выполняется только в том случае, если ParallelLoopState не был остановлен.
Прекрасно работает.За 3 недели использования этой реализации я не испытывал никаких проблем с использованием этой реализации.
Но я только что прочитал и наткнулся на классы «CancellationTokenSource» и «CancellationToken» и обнаружил, что они предназначены для выполнения, по сути, одного и того же действия…, чтобы позволить параллельному циклу отменяться извне.
Может кто-нибудь сказать мне, если они предвидят проблему со мной, продолжающим использовать мою существующую реализацию?
Parallel.ForEach(searchList, (url, state) =>
{
if (!this.isSearching)
{
state.Stop();
OnSearchEvent(new SearchStatusEventArgs(SearchState.STOP_REQUESTED, ......));
}
if (!state.IsStopped)
{
// continue on with regular processing .......
}
});