上图的所有多线程案例大全完整版本项目源代码下载---->点击下载
在C#中,Task
是用于表示异步操作的轻量级对象。它可以用于实现多线程,以并行处理任务。在某些情况下,您可能需要暂停和恢复Task
的执行。这可能是出于以下原因:
- 控制流程:有时,您可能希望在执行某些任务之前先暂停其他任务。例如,如果用户选择保存更改,您可能希望暂停所有其他任务以便于保存操作不会与其他操作冲突。
- 资源管理:如果任务占用了大量资源(如CPU或内存),暂停任务可以释放这些资源以供其他用途。
- 依赖性:如果一个任务依赖于另一个任务的结果,那么您可能需要暂停并等待第一个任务完成。
private ManualResetEvent _resetEvent = new ManualResetEvent(true);
private void button15_Click(object sender, EventArgs e)
{
int i = 1;
int m = 1;
Task task = new Task(() =>
{
while (true)
{
//if (_cancelToken.IsCancellationRequested)
//{
// return;
//}
Console.WriteLine($"........................");
Console.WriteLine($"之前数据-->{m++}的线程ID为{ Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(1000);
// 初始化为true时执行WaitOne不阻塞
_resetEvent.WaitOne();
// Doing something.......
Console.WriteLine($"之后数据-->{i++}的线程ID为{ Thread.CurrentThread.ManagedThreadId}");
Console.WriteLine($"------------------------");
}
});
task.Start();
}
private void button16_Click(object sender, EventArgs e)
{
_resetEvent.Reset(); //暂停Task
}
private void button17_Click(object sender, EventArgs e)
{
_resetEvent.Set(); //继续Task
}