我为wcf服务编写了单元测试用例。现在我需要在多个线程上运行单个测试用例来检查性能。即如果多个用户调用该特定方法(需要是自定义编号,即20 - 500之间的任何数字)。我怎样才能实现这一目标? 我已浏览Parallel.For和Task Prallel Library。但是我的要求无法取得任何成果。
答案 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();
您也可以启动嵌套线程(线程内部线程)。