Одним из членов ParallelOptions является CancellationToken, значение которого предназначено для доступа к функции лямбда Parallel.ForEach.ParallelOptions.CancellationToken кажется бесполезным
Использование этого требует создания экземпляра CacellationToken перед вызовом Parallel.ForEach, поэтому почему эта локальная переменная не может быть доступна непосредственно внутри функции Lambda для ForEach?
например. вместо:
var ct = new CancellationToken();
var options = new ParallelOptions { CancellationToken = ct }
Parallel.ForEach(source, options, (item) =>
{
options.ct.ThrowIfCancellationRequested();
})
почему я не могу просто использовать:
var ct = new CancellationToken();
Parallel.ForEach(source, (item) =>
{
ct.ThrowIfCancellationRequested();
})
Это просто удобное место, чтобы спрятать маркер, или есть какая-то основная причина для этого проекта?
Что хорошего в ParallelOptions, так это то, что вы * не * должны сами проверить маркер отмены. Параллель уже делает это за вас. Итак, нет, это не бесполезно :) –
@ HansPassant - вы правы, как ответил Джон ниже. Я не предполагал, потому что в документации MSDN была явная проверка на отмену, даже если это не обязательно (как вы говорите) - пример, который они дают, проверяет право в конце цикла, делая его избыточным. – afuna