gpt4 book ai didi

windows-runtime - Metro App FileIO.WriteTextAsync 多线程

转载 作者:行者123 更新时间:2023-12-04 18:44:43 27 4
gpt4 key购买 nike

我有一个从多个线程频繁调用的方法。它涉及使用 await FileIO.WriteTextAsync 写入磁盘.这在从单个线程调用时工作正常,但是一旦我开始在多个线程中执行此操作,就会收到此错误:

The process cannot access the file because it is being used by another process.

我知道错误意味着什么,但我不确定如何解决它。通常,我会创建一个 lock(object)语句,以确保一次只有一个线程访问该文件。但是,这是一种异步方法,因此我不能使用 await lock(object) 主体中的运算符陈述。

请告知如何处理这种情况。

最佳答案

您可以使用 SemaphoreSlim充当 async -兼容锁:

SemaphoreSlim _mutex = new SemaphoreSlim(1);

async Task MyMethodAsync()
{
await _mutex.WaitAsync();
try
{
...
}
finally
{
_mutex.Release();
}
}

就个人而言,我不喜欢 finally ,所以我通常自己写 IDisposable在处置时释放互斥锁,我的代码如下所示:
async Task MyMethodAsync()
{
// LockAsync is an extension method returning my custom IDisposable
using (await _mutex.LockAsync())
{
...
}
}

关于windows-runtime - Metro App FileIO.WriteTextAsync 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17000227/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com