我不清楚(并且找不到足够清晰的文档):在异步方法中使用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
最佳答案
不,不会。lock
是Monitor.Enter
和Monitor.Exit
的语法糖。 lock
将在方法中保持执行,直到释放锁定为止。它在任何形式,形状或形式上都不像await
。