我正在处理以下问题,无法解决
https://andrew.thomas.net.nz/c%23/2020/08/30/Beware-使用文件流WriteLineAsync方法/的
我无法解决它,因为等待不能包含在锁中,并且不想使用异步锁实现,所以请寻找您的想法来帮助我用简单的解决方案解决这个问题。
简短回答,如果您不想使用任何可能无法避免问题的信号或锁。
为了避免这种情况,您需要控制线程访问资源,否则,您可能会遇到竞争条件问题。
如果你不想使用lock
,有另一种方法可以同时控制线程访问资源SemaphoreSlim
我们可以设置值CCD_ 2&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进行scape。这是因为流的抽象是顺序访问。为什么要在非顺序访问的文件中写入行?