How do I force a task cancellation?

前端 未结 2 2035
礼貌的吻别
礼貌的吻别 2021-01-02 04:57

Assume, there is a task containing the following actions approximately:

Task someTask = new Task(() => {

  while(!IsCancellationRequested) {

    Do_some         


        
相关标签:
2条回答
  • 2021-01-02 05:24

    They long to terminate my application immediately. They dont want to wait while long action is running.

    By default, Tasks run on the ThreadPool as background tasks. You can safely exit the application without bothering about background threads.

    So as long as you want to quit your process there is no problem.

    Note that Thread.Abort() was quick but not safe. Not even for a quitting application, but then it would seldom cause a real problem.

    0 讨论(0)
  • 2021-01-02 05:33

    You can't force a task to abort in an uncooperative manner. Aborting a thread in an uncontrolled way is unsafe, and thus deliberately unsupported.

    You should make your Do_something_over_a_long_period_of_time calls cancellable instead (i.e. pass them the token, and make them check regularly too).

    EDIT: As noted in another answer, you can kill the application just by making sure all the foreground threads have terminated. But you need to be aware that your tasks won't necessarily have had a chance to terminate cleanly. If they're doing things like writing files, you may well want to wait until the cancellation has been noticed, to avoid corrupting persisted state.

    0 讨论(0)
提交回复
热议问题