在 .Net Core 中,许多 I/O 方法都有异步版本,Microsoft 建议我们使用它们以获得更好的性能。
但是我们知道,异步方法不能在普通锁中正常工作,因为普通锁是相对于线程的。
例如,在 MemoryCache 中使用 ReadWriteLocker。当 MemoryCache 丢失时,我需要从数据库读取数据。
我现在知道两种方法来解决这个问题:
回到标题,当我必须在锁定中使用异步方法时,最好的方法是什么?我需要一些建议。
非常感谢您阅读我糟糕的英语。
最佳答案
lock
只是信号量的语法糖。您可以使用 SemaphoreSlim
做您需要的事情, 像这样。首先在需要线程保护的任何地方都可以访问的字段或属性中声明一个信号量:
public readonly SemaphoreSlim _mySemaphoreSlim = new SemaphoreSlim(1, 1);
然后像这样使用它:
await _mySemaphoreSlim.WaitAsync(cancellationToken);
// Do whatever other sync or async operations you need.
_initializationSemaphoreSlim.Release();
关于c# - 在锁定中使用异步方法的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60282318/