gpt4 book ai didi

c# - 只运行最后一个任务!

转载 作者:太空狗 更新时间:2023-10-29 22:34:06 24 4
gpt4 key购买 nike

我急于找到解决问题的方法。

以下是为 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);
}
}
});
...

关于c# - 只运行最后一个任务!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6653398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com