gpt4 book ai didi

c# - .ContinueWith() 的竞争条件

转载 作者:行者123 更新时间:2023-11-30 14:55:35 24 4
gpt4 key购买 nike

我在一个很难重现的竞争条件下运行,从我的代码分析来看,它似乎来自一个不执行(或直到结束才执行)的延续。

这里是一些呈现上下文的伪代码:

Task<Something> GetObject(string id)
{
// some async code retrieving the object
}

List<Task> tasks = new List<Task>();
List<Something> result = new List<Something>();
foreach (var id in someList)
{
tasks.Add(GetObject(id).ContinueWith(task =>
{
var something = task.Result;
// do some basic sync stuff on something
result.Add(something);
}));
}

await Task.WhenAll(tasks);

随机发生的结果是缺少一些预期的对象。

出于某种原因,我知道 foreach一切顺利,没有理由不将所有必需的任务添加到 List<Task> .

检测或调试目前还没有给出结果,因为它似乎改善了竞争条件……我希望有人能在这里阐明一些问题。谢谢!

最佳答案

For some reason, I know that the foreach went well and there is no reason why all the required tasks would not have been added to the List.

嗯,也许那个 List 不是线程安全的。

我不知道你的问题是列表'someList'是短的还是长的或者可能有重复的值,否则考虑锁定添加和/或an Immutable list .

下一个链接有一个很好的解决方案: List<T> thread safety

关于c# - .ContinueWith() 的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25113016/

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