C#多线程开发之----如何实现暂停业务,多线程阻塞的简单应用,多线程阻塞的简单入门ManualResetEvent

 

 上图的所有多线程案例大全完整版本项目源代码下载---->点击下载

在C#中,Task是用于表示异步操作的轻量级对象。它可以用于实现多线程,以并行处理任务。在某些情况下,您可能需要暂停和恢复Task的执行。这可能是出于以下原因:

  1. 控制流程:有时,您可能希望在执行某些任务之前先暂停其他任务。例如,如果用户选择保存更改,您可能希望暂停所有其他任务以便于保存操作不会与其他操作冲突。
  2. 资源管理:如果任务占用了大量资源(如CPU或内存),暂停任务可以释放这些资源以供其他用途。
  3. 依赖性:如果一个任务依赖于另一个任务的结果,那么您可能需要暂停并等待第一个任务完成。

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
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值