Os semáforos impedem a reordenação de instruções?

Eu estava procurando por um equivalente aguardável de instruções de bloqueio em c #. Algumas pessoas sugerem o uso de um binárioSemaphoreSlim Da seguinte maneira:

await semaphore.WaitAsync().ConfigureAwait(false);
try
{
    //inner instructions
}
finally
{
    semaphore.Release();
}

Sei que ele tem alguns problemas (por exemplo, não é reentrante), mas minha maior preocupação é com a reordenação de instruções.

Em instruções simples e antigas de bloqueio, temos a garantia de que nenhuma instrução interna da trava será movida para fora (antes ou depois) da instrução de trava. O mesmo vale para esta solução de semáforo? Tanto quanto eu posso ver, odocumentação não menciona esse problema.

questionAnswers(3)

yourAnswerToTheQuestion