我想知道如何测试我运行的代码实际上是在同一时间开始...
以下是一段代码:
var threads = new List<Thread>
{
new Thread(() => Call1stFunc()),
new Thread(() => Call2ndFunc())
}
threads.ForEach(t => t.Start());
threads.ForEach(t => t.Join());
如何对其进行单元测试并验证线程是否在同一时间执行? 如果我的代码错了,我怎么知道执行这样的任务的代码是什么?
答案 0 :(得分:1)
您无法在同一时间启动线程,并且无法确定执行顺序。但是您可以使用同步构造来同步线程。例如,使用ManualResetEventSlim强制线程等到设置完毕。
对于单元测试,您可以使用线程编号和时间标记。只需将它们存储在List中,然后将开始时间与delta进行比较。
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();
}