以下代碼演示了主線程如何控制子線程的運(yùn)行,希望對(duì)學(xué)習(xí)C#多線程編程的小伙伴有所幫助!
CancellationTokenSource tokenSource = new CancellationTokenSource();
ManualResetEvent manualResetEvent = new ManualResetEvent(true);
Console.WriteLine("主線程指令:啟動(dòng)");
var myTask = Task.Run(async () =>
{
int value = 0;
while (true)
{
manualResetEvent.WaitOne();
value++;
Console.WriteLine($"\t子線程運(yùn)行了{(lán)value*100}毫秒");
await Task.Delay(100);
}
}, tokenSource.Token);
Thread.Sleep(500);
Console.WriteLine("主線程指令:暫停");
manualResetEvent.Reset();
Thread.Sleep(500);
Console.WriteLine("主線程指令:繼續(xù)");
manualResetEvent.Set();
Thread.Sleep(500);
Console.WriteLine("主線程指令:停止");
tokenSource.Cancel();
manualResetEvent.Close();
Console.Read();
運(yùn)行結(jié)果
主線程指令:啟動(dòng)
子線程運(yùn)行了100毫秒
子線程運(yùn)行了200毫秒
子線程運(yùn)行了300毫秒
子線程運(yùn)行了400毫秒
子線程運(yùn)行了500毫秒
主線程指令:暫停
主線程指令:繼續(xù)
子線程運(yùn)行了600毫秒
子線程運(yùn)行了700毫秒
子線程運(yùn)行了800毫秒
子線程運(yùn)行了900毫秒
子線程運(yùn)行了1000毫秒
主線程指令:停止