Я бы использовал PLINQ здесь:
return Process
.GetProcesses()
.AsParallel()
.SingleOrDefault(p => p.Handle == this._handle);
Интересно, заслуживает ли количество данных, которые вы здесь обрабатываете, параллельных ...
Чтобы ответить на ваш вопрос более прямо,для того, чтобы обработать ранний выход из параллельного цикла, вы должны рассмотреть перегрузки, которые передают ParallelLoopState исполняющему делегату.Это может использоваться для контроля преждевременного завершения цикла.
РЕДАКТИРОВАТЬ:
Вы видите ошибки, потому что ваш процесс не имеет достаточных привилегий для доступа к дескриптору проверяемых процессов.Грубым способом обработки этого будет следующий:
Process
.GetProcesses()
//.AsParallel()
.Where(p=>{try{var h=p.Handle;}catch{return false;}return true;})
.SingleOrDefault(p => p.Handle == this._handle)
Конечно, если предположить, что this._handle
относится к дескриптору текущего выполняющегося процесса:
Process.GetCurrentProcess()
наверняка будетлучше подойдет?