.Netのスレッドの概念を理解しようとしています。Yield()メソッドを使用できません。10で割り切れるようになったときに、コントロールを並列スレッドに移動させたい。
助けてください。
以下は私のサンプルコードです:
class ThreadTest
{
//Index i is declared as static so that both the threads have only one copy
static int i;
static void Main(string[] args)
{
Thread t = new Thread(WriteY);
i = 0;
//Start thread Y
t.Start();
//Do something on the main thread.
for (; i < 100; i++)
{
if (i % 10 == 0)
{
//Simulate Yield() function
Thread.Sleep(0);
Console.WriteLine("The X thread");
}
Console.Write(i + ":X ");
}
Console.ReadKey(true);
}
static void WriteY()
{
for (; i < 100; i++)
{
if (i % 10 == 0)
{
//Simulate Yield() function
Thread.Sleep(0);
Console.WriteLine("The Y thread");
}
Console.Write(i + ":Y ");
}
}
}
コンパイル時エラーが発生します:
System.Threading.Threadには、「Yield」の定義が含まれていません
チューダーが答えた。この方法は、.Net4.0以降でのみ機能します。
理想的には、1つのスレッドを開始し、各スレッドを10ずつiずつ実行するようにします。現在の方法では、すべて「X」またはすべて「Y」を取得します。
編集: TudorとTheHeからの入力で-私は交互のXとYを取得することができました。問題の核心はロックオブジェクトの使用でした。ただし、このコードの出力は予測できません。