Я написал блок кода, но я не уверен, что он потокобезопасен.C# резьба безопасная крышка внутри foreach
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);
Могу ли я рассчитывать на то, что, когда компилятор ставит задачу он использует безопасное значение, что означает, что до тех пор, как Im в цикле и задачи еще не указано, значения, установленные в порядке ?
Потому что, я думаю, что после первого повтора цикла while объект kvp
не будет таким, каким он был, когда задача выполнялась в первый раз.
Если его на самом деле не является потокобезопасным, и я думаю, что это действительно так, как его можно исправить?
Какая версия .NET это? –
@ LasseV.Karlsen im using .net Framework 4.5 –