私はスレッドのコードが含まれているときのNUnitが適切に機能していないことを考える:Nunitでスレッディングが正しく機能していませんか?
ここではサンプルコードがあります:
public class multiply
{
public Thread myThread;
public int Counter
{
get;
private set;
}
public string name
{
get;
private set;
}
private Object thisLock = new Object();
public void RunConsolePrint()
{
//lock(thisLock)
//{
Console.WriteLine("Now thread " + name + " has started");
for (int i = 1; i<= Counter; i++)
{
Console.WriteLine(name + ": count has reached " + i+ ": total count is "+Counter);
}
Console.WriteLine("Thread " + name + " has finished");
//}
}
public multiply(string pname, int pCounter)
{
name = pname;
Counter = pCounter;
myThread = new Thread(new ThreadStart(RunConsolePrint));
}
}
そしてここでは、テストコードは次のとおりです。
[Test]
public void Main()
{
counter=100;
multiply m2=new multiply("Second", counter);
multiply m1 = new multiply("First", counter);
m1.myThread.Start();
m2.myThread.Start();
}
、出力がありますm1
とm2
の連続実行であり、これは、m1
のループがであり、がより前に実行されることを意味します、少なくともそれは私のテストが示すものです。私はテストを数回実行し、私はいつもこれを取得します。
これはバグですか?または期待される行動ですか?
上記のコードをコンソールプログラムにコピーして実行すると、スレッディング効果がはっきりとわかります。
私はTestDriven.netランナーを使用してテストを行っています。
私は上記のテストを数回実行し、一貫した結果を得ました.m1は常にm2の前に最初に実行されます – Graviton
これはバグがあるわけではありません。それはちょうどスケジューリングの奇抜なことかもしれません。タスクを長くするようにしてください。 –