[英]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.