Quindi non è possibile utilizzare i blocchi thread-affine con async
- come posso proteggere le risorse quando si eseguono più processi?Named Mutex con attesa
Per esempio ho due processi che utilizzano una Task qui sotto:
public async Task<bool> MutexWithAsync()
{
using (Mutex myMutex = new Mutex(false, "My mutex Name"))
{
try
{
myMutex.WaitOne();
await DoSomething();
return true;
}
catch { return false; }
finally { myMutex.ReleaseMutex(); }
}
}
Se il moethod custodito da un mutex è sincrona quindi sopra il codice funzionerà ma con async
mi metterò:
Il metodo di sincronizzazione oggetto è stato chiamato da un blocco di codice non sincronizzato.
Quindi è denominato Mutex inutile con codice asincrono?
Molto correlato: http://stackoverflow.com/a/23122566/1768303 – Noseratio
@Romasz: È possibile un'architettura diversa?Sto pensando ad un processo dedicato al proprietario di risorse che esegue richieste per conto di altri processi. –
@Noseratio Grazie per il link, mi ha aiutato a capire alcune cose e ha rovinato la mia idea Semaphore;) – Romasz