gpt4 book ai didi

foreach 中的 C# 线程安全闭包

转载 作者:行者123 更新时间:2023-11-30 20:36:52 27 4
gpt4 key购买 nike

<分区>

我写了一个代码块,但我不确定它是线程安全的。

List<Task> tasks = new List<Task>();
foreach (KeyValuePair<string, string> kvp in result)
{
var t = new Task(async () =>
{
int retries = 0;
bool success = false;
try
{
while (retries <= _maxRetries && !success)
{
await doSomething(kvp.Value);
success = true;
}
}
catch (Exception e)
{
retries++;
}

if (retries == _maxRetries)
{
//TODO: need to do smth about it
}
});
tasks.Add(t);
t.Start();
}
await Task.WhenAll(tasks);

我可以相信编译器设置任务时他使用安全的事实吗值,意思是只要我在循环中,任务还没声明,设置的值就ok?

因为,我认为在while循环的第一次重试之后,kvp对象不会像任务第一次运行时那样。

如果它实际上不是线程安全的(我认为它确实不是),如何修复它?

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