十五、Events类

本文介绍了C#中System.Threading命名空间下的事件同步类,如ManualResetEvent、AutoResetEvent和ManualResetEventSlim,它们用于系统范围内的资源同步。文章通过举例说明了如何使用这些类进行线程间的通信和同步,并探讨了CountdownEvent类在多任务并行处理中的应用。
摘要由CSDN通过智能技术生成

与互斥和信号量对象一样,事件也是一个系统范围内的资源同步方法。为了从托管代码中使用系统事件,.NET Framework在System.Threading名称空间中提供了ManualResetEvent、AutoResetEvent、ManualResetEventSlim和CountdownEvent类。

注意:

第8章介绍了C#中event关键字,它与System.Threading名称空间中的event类没有关系。event关键字基于委托,而上述event类是.NET封装类,用于系统范围内的本机事件资源的同步。

可以使用事件通知其他任务:这里有一些数据,并完成了一些操作等。事件可以发信号, 也可以不发信号。使用前面介绍的WaitHandle类,任务可以等待处于发信号状态的事件。

调用Set()方法,即可向ManualResetEventSlim发信号。调用Reset()方法,可以使之返回不发信号的状态。如果多个线程等待向一个事件发信号,并调用了Set()方法,就释放所有等待的线程。另外,如果一个线程刚刚调用了WaitOne()方法,但事件已经发出信号,等待的线程就可以继续等待。

也通过调用Set()方法向AutoResetEvent发信号。也可以使用Reset()方法使之返回不发信号的状态。但是,如果一个线程在等待AutoResetEvent发信号,当第一个线程的等待状态结束时,该事件会自动变为不发信号的状态。这样,如果多个线程在等待向事件发信号,就只有一个线程结束其等待状态,它不是等待时间最长的线程,而是优先级最高的线程。

为了说明ManualResetEventSlim类的事件,下面的Calculator类定义了Calculation()方法,这是任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值