
[英]How to cancel a task and throw an exception without calling IsCancellationRequested or ThrowIfCancellationRequested
[英]How to cancel Task without CancellationToken.IsCancellationRequested?
我正在使用C#4.0开发WPF应用程序,其中一些用户特定的代码将在运行时进行编译,然后在AppDomain中执行。 该过程可能需要10毫秒或5分钟。 AppDomain将由Task.Factory.StartNew()创建。 工作正常。
现在,我希望能够取消/中断执行。 我可以在执行代码时按“停止”按钮,但是如何取消任务? 我知道:有CancellationToken.IsCancellationRequested属性,但是我无法遍历某些内容。 这就是为什么我在执行(原子)代码时无法检查该值的原因。 并且卸载AppDomain不会停止任务。
仅供参考:我上了Task类,因为它易于使用。 如果Thread有用:没问题。
有人能帮我吗? 一个简短的代码片段会很不错:)。
谢谢。
中止线程或任务是设计不良的解决方案的代码味道。
如果这是您的决定,则应考虑每一行代码可能是最后要执行的代码,并考虑释放任何可能会使系统处于不一致状态的非托管资源,锁等。 从理论上讲,我们应该始终保持这种谨慎,但实际上这并不成立。
如果尝试使用Thread和邀请函.Abort()方法,则应考虑ThreadAbortException是try-catch和finally块方面的特殊异常。 此外,您甚至无法确定该线程将被中止。
关于使用任务,AFAIK(我不是TPL专家)恐怕您无法做您想做的事情。 您应该以某种方式重新设计逻辑,以考虑取消令牌并彻底停止计算。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.