0

阅读帖子时,在 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 = auditFile;”这样的变量?

注意:我使用的是 VS 2017 的更新版本及其 C# 编译器。

4

1 回答 1

0

好的,感谢damien-the-unbeliever让我回到Eric Lippert 的博客:关闭循环变量 part 2

所以简短的回答是肯定的,如果我是 c# v 4.0 或更早版本。在 c# 5.0 或更高版本中,无论如何都不需要它。

于 2018-11-14T18:42:03.217 回答