How do I force a Task to stop?

徘徊边缘 提交于 2019-12-22 04:29:04

问题


I am using a Task with a CancellationTokenSource provided, and within my task I always check if cancellation is requested and stop executing if requested - in the parts of the code that I control. The problem is that within this task, I use very long running methods from libraries that don't support cancelling and were compiled for .NET 3.5 (I'm using 4.5.1).

Depending on the input, these methods can run for several minutes (sometimes 10+). I don't want to let so much processing go to waste if the result is never going to be used.

Is there any other way to forcefully terminate a Task? Perhaps I am better off making a thread within my task just to run these methods, and kill those threads whenever cancellation is requested.


回答1:


Your only option is to wrap these non-cancelable functions within a separate thread and just terminate that thread upon cancelation. As mentioned by others Thread.Abort is an extremely unsafe operation. It terminates the thread without allowing any resource cleanup that may be needed. Use this as a last resort. Depending on when you abort your program might be left in undesired states.




回答2:


It depends on your specific implementation, but you can try and make the long operation throw an exception (as long as it handles that well) after a timeout has passed, and catch it in the code you control.

You can find examples in this question: Async network operations never finish



来源:https://stackoverflow.com/questions/22456462/how-do-i-force-a-task-to-stop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!