Переназначение значения задачи необходимо, когда не используется task.ContinueWith () - PullRequest
0 голосов
/ 14 ноября 2018

При чтении поста Запуск заданий В цикле foreach использует значение последнего элемента ) помеченный ответ имеет большой смысл. Автор создал новую переменную, pathCopy, для использования в задаче. Мой вопрос, это необходимо только при использовании Task.ContinueWith ()?

Вот пример:

    private void GetAuditFiles()
    {
        _auditFiles = new ConcurrentBag<AuditFile>();

        var tasks = new List<Task>();
        foreach (var auditFile in Directory.GetFiles(_properties.AuditFileOutputPath))
        {
            var taskfile = auditFile;

            tasks.Add(Task.Factory.StartNew(() =>
            {
                var file = DeserializeProcessProperties<AuditFile>(File.ReadAllText(taskfile));
                file.filename = Path.GetFileName(taskfile);
                _auditFiles.Add(file);
            }));
        }

        Task.WaitAll(tasks.ToArray());
    }

Нужно ли устанавливать переменную наподобие "var taskfile = audFile;"?

Примечание. Я использую обновленную версию VS 2017 и его компилятор C #.

1 Ответ

0 голосов
/ 14 ноября 2018

Хорошо, спасибо Дэмиену-неверующему , за то, что он указал мне на Блог Эрика Липперта: закрытие второй переменной цикла .

Так что короткий ответ - да, если я c # v 4.0 или ранее.В любом случае это не требуется, если на c # 5.0 или позже.

...