.Net中异步任务的取消和监控的具体实现(2)

public void Run() { var bjDate = new BeijingDate(); DisplayDate(bjDate.GetChangeToken, bjDate.GetDate); Thread.Sleep(50000); } public void DisplayDate(Func<IChangeToken> getChangeToken, Func<DateTime> getDate) { ChangeToken.OnChange(getChangeToken, () => Console.WriteLine("当前时间:" + getDate())); } public class BeijingDate { private CancellationTokenSource cts; private DateTime date; public BeijingDate() { cts = new CancellationTokenSource(); var timer = new Timer(TimeChange, null, 0, 1000); } private void TimeChange(object state) { date = DateTime.Now; var old = cts; cts = new CancellationTokenSource(); old.Cancel(); } public DateTime GetDate() => date; public CancellationChangeToken GetChangeToken() { return new CancellationChangeToken(cts.Token); } }

在TimeChange()中修改了时间,重置了Token并将旧的Token取消

在DisplayDate中用ChangeToken.OnChange获取对应的Token并监听

实现了DisplayData函数和BeijingDate这个类的解耦

ChangeToken.OnChange 这个函数接收两个参数,一个是获取Token的委托,一个是Token取消事件的响应委托。

每次在处理完Token的取消事件后,他会重新调用第一个委托获取Token,而此时我们已经生成了新的Token,最终实现了持续监控

到此这篇关于.Net中异步任务的取消和监控的文章就介绍到这了,更多相关.Net中异步任务的取消和监控内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysfdf.html