我正在从我的数据库加载一些值以显示给我的网站用户。由于这些值不会改变太多,我将它们加载到静态/共享对象中。
为了确保多个用户不会同时修改同一个对象,我使用Monitor.Enter(和Monitor.Exit) 来锁定/阻止这些值的加载。
不幸的是,这在从 .NET 中的 MVC 视图调用时不起作用,因为它会引发此异常:
从未同步的代码块调用对象同步方法。
有没有办法通过 MVC 做到这一点,而无需完全改变我的代码设计?
您看到此错误是因为您很可能在 async 方法中使用 Monitor。但是您不应该,可以在 async/await 中的监视器中阅读有关此问题的更多信息
您可以简单地用SemaphoreSlim或AutoResetEvent替换 Monitor