sagen, dass ich ein Asynchron-Methode haben, die Datei speichert:Wie synchronisiert man Aufgaben?
async Task SaveToFileAsync()
{
var file = await folder.GetFileAsync (...)
var stream = file.OpenFileAsync(...)
///etc
}
Nun stell dir vor, dass SaveToFileAsync zweimal gleichzeitig aufgerufen wird. Dies ist ein Problem, weil Sie nicht auf der gleichen Datei
gleichzeitig schreiben können, wenn dies eine reguläre Methode waren, lock() würde dieses Problem beheben:
void SaveToFile()
{
lock(something)
{
/// code here
}
}
jedoch Sperre wird in einem Asynchron-Methode nicht erlaubt .
Natürlich könnte man Monitor.Enter() aufrufen oder einen Mutex verwenden, aber diese Objekte funktionieren mit Threads, nicht mit Aufgaben. Daher sind sie nicht die Antwort.
Also, da lock() keine Option ist, wie können mehrere Aufgaben synchronisiert werden? Insbesondere welchen Code sollte ich schreiben, um sicherzustellen, dass "SaveToFileAsync" nur einmal aufgerufen wird?
Ist das nicht * "SaveToFileAsync" genannt wird, Sie haben einmal gesagt, dass Sie die Methode für genau das Gegenteil von dem verwenden möchten, für das sie entworfen wurde? – Khan
@Jeff die einzige Sache, die in den Sinn kommt, dass Sie in 2 verschiedenen Dateien asynchron speichern möchten, aber den Zugriff auf die gleiche Datei synchronisieren möchten ... – Servy
Sie könnten eine Warteschlange verwenden, die ein separater Worker-Prozess arbeitet. –