我注意到當我lock(myLock) ...在 c# 中使用時,它是這樣的
object obj = mylock;
bool lockTaken = false;
try
{
Monitor.Enter(obj, ref lockTaken);
...
}
finally
{
if (lockTaken)
{
Monitor.Exit(obj);
}
}
我想知道為什么編譯器會自動添加object obj = mylock,而不是mylock直接使用?
uj5u.com熱心網友回復:
幾個 C# 構造 ( using, lock) 被轉換為最終代碼,以防止重新分配所使用的變數。您真的不希望finallysection 執行與原始操作開始時不同的值。
如果編譯器僅使用myLockinfinally部分的當前值,則行為不正確的代碼示例:
object myLock = new object();
lock(myLock)
{
myLock = new object();
...
}
請注意,編譯此類代碼也會帶來 CS0728 警告,因為嘗試更改鎖定變數將被忽略。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/369799.html
下一篇:如何轉換RESTAPI回應
