只有最后一个任务运行

The*_*Guy 5 .net c# wpf task-parallel-library

我迫切希望找到解决问题的办法.

以下是为每个项目生成不同任务的代码List<AccountContactView>.

List<AccountContactViewModel> selectedDataList
    = DataList.Where(
        dataList => (bool) dataList.GetType()
                                   .GetProperty("IsChecked")
                                   .GetValue(dataList, new object[0]) == true
      ).ToList();

this.IsEnabled = false;

Task validateMarked = Task.Factory.StartNew(() =>
{
    foreach (AccountContactViewModel viewModel in selectedDataList)
    {
        if (viewModel != null)
        {
            Task validate = Task.Factory.StartNew(
                () => ValidateAccount(viewModel),
                (TaskCreationOptions)TaskContinuationOptions.AttachedToParent);
        }
    }
});

validateMarked.ContinueWith(x => this.IsEnabled = true);
Run Code Online (Sandbox Code Playgroud)

现在我的问题是它运行时,它只运行数组中的最后一项.关于我做错了什么的任何想法?

我不想使用Parallel.ForEach因为它没有提供必要的并行效果来增加基于每个任务完成的进度条.

mar*_*rto 9

这可能是lambda范围问题.

您是否尝试将viewModel分配给局部变量,然后再将其传递给StartNew方法

...
Task validateMarked = Task.Factory.StartNew(() =>
{
    foreach (AccountContactViewModel viewModel in selectedDataList)
    {
        var localViewModel = viewModel;
        if (localViewModel != null)
        {
            Task validate = Task.Factory.StartNew(
                () => ValidateAccount(localViewModel),
                (TaskCreationOptions)TaskContinuationOptions.AttachedToParent);
        }
    }
});
...
Run Code Online (Sandbox Code Playgroud)