同时启动多个线程并单击它

时间:2015-01-22 13:16:00

标签: c# multithreading

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

以下是一段代码:

var threads = new List<Thread>
{
  new Thread(() => Call1stFunc()),
  new Thread(() => Call2ndFunc())
}
threads.ForEach(t => t.Start());              
threads.ForEach(t => t.Join());

如何对其进行单元测试并验证线程是否在同一时间执行? 如果我的代码错了,我怎么知道执行这样的任务的代码是什么?

1 个答案:

答案 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();

}