需要多线程环境来运行单个测试用例,即需要在多个线程上运行单个测试用例

时间:2013-12-16 13:24:42

标签: c# multithreading

我为wcf服务编写了单元测试用例。现在我需要在多个线程上运行单个测试用例来检查性能。即如果多个用户调用该特定方法(需要是自定义编号,即20 - 500之间的任何数字)。我怎样才能实现这一目标? 我已浏览Parallel.ForTask Prallel Library。但是我的要求无法取得任何成果。

1 个答案:

答案 0 :(得分:2)

嗯......希望这有帮助...

要在其他线程中运行方法,只需执行:

new System.Threading.Thread(() => YourMethodName()).Start();

这可以多次使用。

请注意,此方法返回void并且不接收任何参数。

要实现您的目标,您需要:

for (int i = 0; i <= 500; i++)
{
    new System.Threading.Thread(() => YourMethodName()).Start();
}

注意:

a)使用此代码,您不知道线程何时结束。要验证线程何时完成,您需要使用.IsAlive属性。例如:

Thread t = new System.Threading.Thread(() => YourMethodName());
t.Start();

验证:

if (t.IsAlive)
{
      // running
}
else
{
     // finished
}

2)不能从外部处理例外情况。您需要处理线程内的所有异常,否则如果引发异常,程序将会中断。

3)您无法访问线程内的UI元素。要访问UI元素,您需要使用Dispatcher。

修改

您可以在其他线程中执行更多操作,而不仅仅是触发方法。

您可以传递参数:

new System.Threading.Thread(() => YourMethodName(a, b, c)).Start();

您可以运行多种方法:

new System.Threading.Thread(() => 
{
     YourMethodName(a, b, c);
     OtherMethod(a);         
}).Start();

您可以接收从线程返回的值:

int x = 0;
new System.Threading.Thread(() => { x = YourMethodName(); }).Start();

要知道x何时从线程接收值,你可以这样做(假设一个int):

int x 
{ 
    set { VariableSetted(value); }  // fire the method
}  // put it in global scope, outside the method body

new System.Threading.Thread(() => { x = YourMethodName(); }).Start();

以及线程返回值时运行的方法:

public void VariableSetted(int x)
{
     // Do what you want with the value returned from thread
     // Note that the thread started this method, so if you need to
     // update UI objects, you need to use the dispatcher.
}

我不知道您是否使用WPF来制作用户界面,但如果是,要更新屏幕,您可以这样做:

new System.Threading.Thread(() => 
{ 
    string result = YourMethodName(); 
    this.Dispatcher.Invoke((Action)(() => { yourTextBox.Text = result; }));
}).Start();

您也可以启动嵌套线程(线程内部线程)。