VS2012(およびおそらく以前のバージョンも)は、「メインスレッド」またはブレークポイントにヒットしたスレッドを使用してプロパティのゲッターを実行するように見えます。
これは私のテストコードです:
static class TestSideEffects
{
public static void Test()
{
Console.WriteLine("Main Thread: {0}", Thread.CurrentThread.ManagedThreadId);
var o = new TestSubject();
Console.WriteLine("Property Value: {0}", o.IntGetValueNoSe());
}
}
class TestSubject
{
private int _prop=0;
public int TheProperty
{
get
{
Console.WriteLine("Thread accessing the property: {0}", Thread.CurrentThread.ManagedThreadId);
return ++_prop;
}
}
public int IntGetValueNoSe(){return _prop; }
}
Testメソッドの3行目とゲッター自体に2つのブレークポイントを設定し、マウスをoインスタンスに合わせるたびに、他のブレークポイントをトリガーせずにゲッターを実行します。同じ(この場合はメイン)スレッドを使用します。
これは、テストプログラムの出力です。
Main Thread: 8
Thread accessing the property: 8
Thread accessing the property: 8
Thread accessing the property: 8