只运行最后一个任务

本文关键字:任务 最后一个 运行 | 更新日期: 2023-09-27 18:01:41

我非常想找到一个解决问题的办法。

以下是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,因为它不提供必要的并行效果,以增加基于每个任务完成的进度条

只运行最后一个任务

这可能是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);
        }
    }
});
...