【发布时间】:2017-08-12 17:21:49
【问题描述】:
我收到了一项可以同时执行多项任务的服务。我被分配添加一个中止选项,该选项应该结束所有当前正在运行的任务。因为系统已经实现,将 CancellationTokenSource 传递给每个任务是有问题的,所以我所做的是创建一个所有任务都将监听以取消的单个任务。当中止接收时,该令牌将发送取消,然后将创建一个新的 CancellationTokenSource 实例。 我无法验证所有任务,直到中止结束在一个新的 CancellationTokenSource 实例被启动。
几个问题:
起初我以为 TokenSource.Cancel() 只是一个发送的事件,但它似乎卡在“高位”,所以任何具有相同令牌的新任务也会收到取消,是真的吗?
理想情况下,每个任务都有自己的取消令牌(对吗?),问题是谁需要持有该令牌?谁调用了任务或任务本身?因为一旦发送取消,我将需要永远保留该令牌,因为我无法判断任务何时到达退出点..
是否有一种已经实现的方法来监视所有当前正在运行的任务,所以当发送取消时,我会确保所有任务都已结束,然后才允许任何新任务?我是用信号量做的,但它看起来很糟糕。..
对不起,新手问题,我已经实现了我需要的东西并且它有效,但质量远低于标准,我希望以正确的方式改进它。
【问题讨论】:
标签: c# .net multithreading threadpool cancellationtokensource