簡體   English   中英

同時啟動多個線程並對其進行單元測試

[英]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強制您的線程等待,直到其設置為止。

對於單元測試,您可以使用線程號和時間標記。 只需將它們存儲在List中,然后將開始時間與增量進行比較即可。

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM