Condição de corrida em código assíncrono / em espera
Eu só me pergunto se uma condição de corrida ocorre no código abaixo:
int readingFiles;
async Task<string> ReadFile (string file)
{
++readingFiles;
var text = await Stream.ReadFileAsync(file);
--readingFiles;
return text;
}
Se o método ReadFile for executado por um thread do conjunto de encadeamentos, o readFiles será acessado por dois encadeamentos diferentes e a variável readFiles não será protegida por nenhum idioma de sincronização.
Isso significa que a primeira atualização de readingFiles não deve estar visível para o outro thread que está executando "--readingFiles". No entanto, NUNCA vi que readingFiles seja igual a -1 após "--readingFiles". Verifico se o mesmo thread executa as operações ++ e - usando Thread.CurrentThread. Na maioria dos casos, não é o mesmo segmento e ainda não vejo a leitura de arquivos como -1.
Mesmo que exista uma condição de corrida e readingFiles não seja volátil, por que não vejo o efeito dessa condição de corrida?