同时启动多个线程并对其进行单元测试



我想知道如何测试我正在运行的代码是否实际上是在同一时间开始的......

下面是一段代码:

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();
}

最新更新