如何取消 Thread.Abort() 上的任务
How to cancle a task on Thread.Abort()
我正在实施一个由其他人调用的方法。如果我的方法花费很长时间,调用者将调用 Thread.Abort()
。我在我的方法中启动了一些任务,如果我的线程中止,我需要取消这些任务。
我目前猜测我的超时时间并在此时间跨度后取消任务。它并不总是相同的超时,具体取决于在我的方法之前执行的操作。
有没有办法将我的任务与该线程生命周期联系起来?
更新
为了防止任何进一步的评论,我不应该使用 Thread.Abrot()
,这是处理中止的代码 (不是我调用的,无法更改):
using (var cancelationTokenSource = new CancellationTokenSource())
{
try
{
DoWork(cancelationTokenSource.Token);
}
catch (ThreadAbortException)
{
cancelationTokenSource.Cancel();
throw;
}
}
我用的是CancelationToken
不是Thread.Abort()
您可以处理 ThreadAbortException 以进行清理,包括在必要时中止其他线程。
void MyThreadProc()
{
try
{
//Do interesting things
}
catch ( ThreadAbortException e )
{
childThread.Abort();
}
}
我正在实施一个由其他人调用的方法。如果我的方法花费很长时间,调用者将调用 Thread.Abort()
。我在我的方法中启动了一些任务,如果我的线程中止,我需要取消这些任务。
我目前猜测我的超时时间并在此时间跨度后取消任务。它并不总是相同的超时,具体取决于在我的方法之前执行的操作。
有没有办法将我的任务与该线程生命周期联系起来?
更新
为了防止任何进一步的评论,我不应该使用 Thread.Abrot()
,这是处理中止的代码 (不是我调用的,无法更改):
using (var cancelationTokenSource = new CancellationTokenSource())
{
try
{
DoWork(cancelationTokenSource.Token);
}
catch (ThreadAbortException)
{
cancelationTokenSource.Cancel();
throw;
}
}
我用的是CancelationToken
不是Thread.Abort()
您可以处理 ThreadAbortException 以进行清理,包括在必要时中止其他线程。
void MyThreadProc()
{
try
{
//Do interesting things
}
catch ( ThreadAbortException e )
{
childThread.Abort();
}
}