Decir que tengo un método asíncrono lo que ahorra a presentar:¿Cómo sincronizar tareas?
async Task SaveToFileAsync()
{
var file = await folder.GetFileAsync (...)
var stream = file.OpenFileAsync(...)
///etc
}
Ahora imaginemos que SaveToFileAsync se llama dos veces al mismo tiempo. Esto es un problema porque no se puede escribir en el mismo archivo al mismo tiempo
Si esto fuera un método regular, bloqueo() podría solucionar este problema:
void SaveToFile()
{
lock(something)
{
/// code here
}
}
Sin embargo, la cerradura no está permitido en un método asíncrono .
Por supuesto, se podría llamar a Monitor.Enter() o usar un mutex, pero estos objetos funcionan con hilos, no con tareas. Por lo tanto, no son la respuesta.
Entonces, como lock() no es una opción, ¿cómo se pueden sincronizar varias tareas? En particular, ¿qué código debo escribir para asegurarme de que "SaveToFileAsync" se invoque solo una vez a la vez?
No es * "SaveToFileAsync" se llama solamente una vez a la vez * indicando que le gustaría usar el método exactamente para lo contrario para lo que fue diseñado? – Khan
@Jeff lo único que se le viene a la mente es que desea guardar en 2 archivos diferentes de forma asíncrona pero desea sincronizar el acceso al mismo archivo ... – Servy
Puede usar una cola en la que opere un proceso de trabajo independiente. –