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?

questionAnswers(2)

yourAnswerToTheQuestion