¿Cómo refactorizar ‘lock’ a ‘async/await’?
Tenemos una biblioteca antigua escrita en C# para targeting framework 2.0. Recientemente, vamos a utilizarla en un proyecto moderno de .net core y tenemos la intención de utilizar async/await. Sin embargo, la biblioteca antigua tiene muchos bloques de lock.
Planeamos agregar nuevos métodos async para implementar la misma lógica.
Por ejemplo,
el código antiguo
void GetOrder()
{
// …
lock(_lock)
{
//…
}
}
resultado esperado
async Task AsyncGetOrder()
{
// …
await DoSomethingWithLock()
}
Por favor, dame algunos consejos sobre cómo traducir lock en async/await.
davy.ai
La mejor manera de traducir
lock
enasync/await
es utilizando la claseSemaphoreSlim
. Esta clase proporciona una manera segura de hilos para limitar la cantidad de hilos que pueden acceder a un recurso o grupo de recursos concurrently.Por ejemplo, se puede utilizar el método
WaitAsync
para adquirir el semáforo y el métodoRelease
para liberarlo: