同时启动多个线程并对其进行单元测试
Start multiple threads at same time and UnitTest it
我想知道如何测试 运行 的代码实际上是在同一时间开始的...
这里有一段代码:
var threads = new List<Thread>
{
new Thread(() => Call1stFunc()),
new Thread(() => Call2ndFunc())
}
threads.ForEach(t => t.Start());
threads.ForEach(t => t.Join());
如何对其进行单元测试并验证线程是否同时执行?
如果我的代码有误,我怎么知道执行此类任务的正确代码是什么?
您不能完全同时启动线程,并且执行顺序未确定。但是您可以使用同步结构来同步您的线程。例如,使用 ManualResetEventSlim 强制您的线程等待它设置。
对于单元测试,您可以使用线程号和时间标记。只需将它们存储在列表中,然后将开始时间与增量进行比较。
static void Main(string[] args)
{
var ids = new[] { "1", "2", "3" };
var manualResetEventSlim = new ManualResetEventSlim();
foreach (var id in ids)
{
var thread = new Thread((obj) =>
{
Console.WriteLine(string.Format("thread {0} strated", obj as string));
manualResetEventSlim.Wait();
Console.WriteLine("thread {0} work in progress", obj as string);
});
thread.Start(id);
}
Console.ReadKey();
manualResetEventSlim.Set();
Console.ReadKey();
}
我想知道如何测试 运行 的代码实际上是在同一时间开始的...
这里有一段代码:
var threads = new List<Thread>
{
new Thread(() => Call1stFunc()),
new Thread(() => Call2ndFunc())
}
threads.ForEach(t => t.Start());
threads.ForEach(t => t.Join());
如何对其进行单元测试并验证线程是否同时执行?
如果我的代码有误,我怎么知道执行此类任务的正确代码是什么?
您不能完全同时启动线程,并且执行顺序未确定。但是您可以使用同步结构来同步您的线程。例如,使用 ManualResetEventSlim 强制您的线程等待它设置。
对于单元测试,您可以使用线程号和时间标记。只需将它们存储在列表中,然后将开始时间与增量进行比较。
static void Main(string[] args)
{
var ids = new[] { "1", "2", "3" };
var manualResetEventSlim = new ManualResetEventSlim();
foreach (var id in ids)
{
var thread = new Thread((obj) =>
{
Console.WriteLine(string.Format("thread {0} strated", obj as string));
manualResetEventSlim.Wait();
Console.WriteLine("thread {0} work in progress", obj as string);
});
thread.Start(id);
}
Console.ReadKey();
manualResetEventSlim.Set();
Console.ReadKey();
}