次のコードを検討してください。
public class Test
{
public void Print()
{
lock (this)
{
System.Threading.Thread.Sleep(10000);
Console.WriteLine("Print");
}
}
public static void Somthing()
{
Console.WriteLine("Somthing");
}
}
printメソッド Iではlock、クラスSomthingは静的メソッドです。呼び出しのインスタンスがないため、後で呼び出すときに、個別にスレッドを実行するSomthingことPrintを期待しています。SomthingTestSomthing
private static void Main(string[] args)
{
var test = new Test();
test.Print();
Test.Somthing();
}
しかし、上記のコードを書くときは、Testロックしてから呼び出しますSomthing。
コンパイラがこの動作をするのはなぜですか?