假设我有一个保存到文件的异步方法:
async Task SaveToFileAsync()
{
var file = await folder.GetFileAsync ( ...)
var stream = file.OpenFileAsync(...)
///etc
}
现在想象一下 SaveToFileAsync 被同时调用了两次。这是一个问题,因为您不能同时在同一个文件上写入
如果这是常规方法, lock() 将解决此问题:
void SaveToFile()
{
lock(something)
{
/// code here
}
}
但是,异步方法中不允许使用锁定。
当然,可以调用 Monitor.Enter() 或使用互斥体,但这些对象使用线程,而不是任务。因此,它们不是答案。
那么既然 lock() 不是一个选项,那么如何同步多个任务呢?特别是,我应该编写什么代码来确保一次只调用一次“SaveToFileAsync”?