私はこの単純なコードを持っています:(私はlinqpadで実行します)
void Main()
{
for ( int i=0;i<10;i++)
{
int tmp=i;
new Thread (() =>doWork(tmp)).Start();
}
}
public void doWork( int h)
{
h.Dump();
}
このint tmp=i;
行はキャプチャ変数用です。したがって、各反復には独自の値があります。
2つの問題:
1)スレッドの実行が!であるのに対し、番号は連続していません。
2)時々私は10未満の数字を取得します!
ここにいくつかの実行出力があります:
質問:
1)ケース1が発生している理由と、それを解決するにはどうすればよいですか?
2)ケース2が発生している理由と、それを解決するにはどうすればよいですか?