只有最后一个任务运行

时间:2011-07-11 16:33:55

标签: c# .net 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);

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

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

1 个答案:

答案 0 :(得分: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);
        }
    }
});
...