如何解决C#异步文件在随机时间写入System.IO.IOException
我有此功能,每分钟都会调用一次,有时它会在代码中以其他方式触发。
static async Task WriteFileAsync(string file,string content)
{
using (StreamWriter outputFile = new StreamWriter(file))
{
await outputFile.WriteAsync(content);
}
}
System.IO.IOException: 'The process cannot access the file 'hello.json' because it is being used by another process.'
解决方法
您需要具有锁以防止多个线程同时调用WriteFileAsync
。由于当块中存在lock
状态时,无法使用await
关键字SemaphoreSlim。
// Initialize semaphore (maximum threads that can concurrently access the file is 1)
private static readonly SemaphoreSlim _semaphoreSlim = new SemaphoreSlim(1,1);
static async Task WriteFileAsync(string file,string content)
{
// Acquire lock
await _semaphoreSlim.WaitAsync();
try
{
using (StreamWriter outputFile = new StreamWriter(file,true))
{
await outputFile.WriteAsync(content);
}
}
finally
{
// Release lock in finally block so that lock is not kept if an exception occurs
_semaphoreSlim.Release();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。