该流当前正被先前的操作使用

The stream is currently in use by a previous operation

我运行遇到了以下问题,无法解决

https://andrew.thomas.net.nz/c%23/2020/08/30/Beware-of-using-File-Stream-WriteLineAsync-methods/

我无法解决它,因为 await 不能包含在锁内并且不想使用异步锁实现,所以寻找您的想法来帮助我用一个简单的解决方案解决这个问题。

简短的回答,如果你不想使用任何可能无法避免问题的信号或锁。

为避免这种情况,您需要控制线程访问资源,否则,您可能会遇到 race-condition 问题。

如果你不想使用lock还有另一种方法可以同时控制线程访问资源SemaphoreSlim

我们可以把initialCount&maxCount的值从SemaphoreSlim设置为1,表示只有一个线程可以使用资源,其他线程会同时等待信号你正在使用多线程。

private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1,1);
           
await semaphoreSlim.WaitAsync();
//your want to avoid race-condition code zone.
semaphoreSlim.Release();

我认为你无法避免使用 SemaphoreSlim。那是因为流的抽象是顺序访问。为什么要以非顺序访问方式读取文件中的行?