最初のケース。
特にスレッドはシナリオに関与していないため、しばらくスレッドを除外しましょう。
プロパティとメソッドについて話していますが、その下にあるのはすべて単なる関数です。ある関数が別の関数を呼び出すと、プログラム内の制御は呼び出された関数に移ります。その関数の実行が終了すると、制御は呼び出されたポイントに戻ります。プログラムは、関数がより多くの関数をどれほど深く呼び出しても、どこに戻る必要があるかを自動的に覚えています。*
2 番目の関数がインデックスを設定するときに実際に起こることは、コンパイラがプロパティ セット操作を関数呼び出しに変換することです。(プロパティは、最終的には関数の「シンタックス シュガー」にすぎません。) その関数は、シナリオにとって重要ではない他の関数の束を呼び出しますが、そのうちの 1 つは「インデックス変更」イベント ハンドラーを呼び出す関数です。そのイベントに関連付けられたメソッドがあることを認識し、最初のメソッドを呼び出します。
最初のメソッドが実行され、終了すると、「インデックスが変更されたイベント ハンドラーを呼び出す」関数に戻ります。最終的に、それと他のすべての重要でない関数の実行が終了し (おそらく、さらに関数呼び出しを順番に行った後)、「インデックス プロパティの設定」関数が制御を 2 番目のメソッドに返します。
あなたの最初の提案がそれがどのように機能するかを自分自身に証明することができます. 最初のメソッドでメッセージ ボックスを表示し、2 番目のメソッドで index プロパティを設定したポイントの後に別のメッセージ ボックスを表示します。(別のメッセージを使用してください!) 最初のメッセージが表示され、メッセージ ボックスを閉じると 2 番目のメッセージが表示され、最初のメソッドの実行中に 2 番目のメソッドが実行を継続しなかったことが示されます。
*
制限はありますが、プログラムにバグがない限り、ヒットすることはめったにありません。ネストされた関数呼び出しが多すぎると、スタック オーバーフローが発生します。