Dire che ho un metodo asincrono che salva in un file:Come sincronizzare le attività?
async Task SaveToFileAsync()
{
var file = await folder.GetFileAsync (...)
var stream = file.OpenFileAsync(...)
///etc
}
Ora immaginate che SaveToFileAsync viene chiamato due volte contemporaneamente. Questo è un problema perché non si può scrivere sullo stesso file contemporaneamente
Se questo fosse un metodo regolare, lock() sarebbe risolvere questo problema:
void SaveToFile()
{
lock(something)
{
/// code here
}
}
Tuttavia, serratura non è consentito in un metodo asincrono .
Ovviamente, si può chiamare Monitor.Enter() o utilizzare un mutex ma questi oggetti funzionano con i thread, non con le attività. Quindi non sono la risposta.
Quindi, poiché lock() non è un'opzione, come è possibile sincronizzare più attività? In particolare, quale codice dovrei scrivere per assicurare che "SaveToFileAsync" venga chiamato solo una volta alla volta?
non è * "SaveToFileAsync" si chiama solo una volta alla volta * affermando che ti piacerebbe utilizzare il metodo esattamente per l'opposto di quello per cui è stato progettato? – Khan
@Jeff l'unica cosa che viene in mente è che si desidera salvare in 2 file diversi in modo asincrono ma si desidera sincronizzare l'accesso allo stesso file ... – Servy
È possibile utilizzare una coda su cui opera un processo di lavoro separato. –