我不清楚(并且找不到足够清晰的文档):在异步方法中使用lock关键字时:如果对象已被阻塞,线程将被阻塞,还是将其挂起状态返回任务(不阻塞线程) ,并在释放锁定时返回)?

在下面的代码中,该行会阻塞线程吗?如果它阻塞了线程(这是我的想法),是否有一个标准的不阻塞解决方案?我正在考虑使用AsyncLock,但是首先我想尝试一些标准的东西。

谢谢。

private object myLock = new object();

private async Task MyMethod1(){
  lock (myLock ) {// <---- will this line cause a return of the current method as an Await method call would do if myLock was already locked.

    ....
  }
}

// other methods that lock on myLock

最佳答案

不,不会。
lockMonitor.EnterMonitor.Exit的语法糖。 lock将在方法中保持执行,直到释放锁定为止。它在任何形式,形状或形式上都不像await

07-26 02:26