在C#中,Wait
方法通常用于等待某個操作完成,例如等待一個線程完成執行。然而,它也可以用于任務調度,但需要結合其他同步原語(如ManualResetEvent
、AutoResetEvent
、SemaphoreSlim
等)來實現。
以下是一個使用ManualResetEvent
實現任務調度的示例:
using System;
using System.Threading;
class Program
{
static ManualResetEvent taskCompletedEvent = new ManualResetEvent(false);
static void Task1()
{
Console.WriteLine("Task 1 started.");
Thread.Sleep(2000); // Simulate some work
Console.WriteLine("Task 1 completed.");
taskCompletedEvent.Set(); // Signal that task 1 is completed
}
static void Task2()
{
Console.WriteLine("Task 2 started.");
taskCompletedEvent.WaitOne(); // Wait for task 1 to complete
Console.WriteLine("Task 2 completed.");
}
static void Main(string[] args)
{
Thread task1Thread = new Thread(Task1);
Thread task2Thread = new Thread(Task2);
task1Thread.Start();
task2Thread.Start();
task1Thread.Join();
task2Thread.Join();
Console.WriteLine("All tasks completed.");
}
}
在這個示例中,我們使用ManualResetEvent
來確保Task2
在Task1
完成之后才開始執行。taskCompletedEvent.WaitOne()
方法會阻塞當前線程,直到taskCompletedEvent
被設置為true
。當Task1
完成后,我們調用taskCompletedEvent.Set()
來通知Task2
可以開始執行。