标题: TimerComponent相关ETTask的取消CancelToken
修仙中的AE:
如图的方法,传进来一个CancelToken,假如外部调用了一次Cancel
会触发下图中的Remove()方法,但此时并没有设置对应timer的tcs
即下图中的第一个红圈处的语句。
这是否会导致外部的await语句一直等待呢?
egametang:
调用了cancel就意味着取消了await后面的逻辑,不调用是正确的, 如果还调用,那cancel还有什么意义呢
修仙中的AE:
那样的话,这里await形成的一个回调任务岂不是一直存在么,没法通过什么途径释放掉?
我感觉这里的Cancel应该只提醒一下这个任务取消了,让我们可以来判断任务是被及时中止的,还是顺利完成的
比如CancelToken中的IsCancellationRequested属性
如图,我想在await后面判断是否是顺利完成的。
否则的话,await语句形成的一个回调这不就一直在某个地方占着么
这样也会导致使用了这个Task的tcs所在的Timer一直迟迟无法被回收吧
egametang:
回调就是tcs, tcs删除了,没有东西抓住tcs,就会被gc掉,
修仙中的AE:
原来如此!那这样的话一切就说得通了!
感谢猫大指点迷津!