在新线程中触发System.Threading.ThreadAbortException

时间:2012-07-17 17:45:08

标签: c# c#-4.0 task-parallel-library parallel-extensions taskfactory

我目前正在.net c#4.0工作,并且遇到了一些问题,我写的一些代码令我头疼。

我正在使用System.Threading.Tasks.TaskFactory类与System.Threading.Tasks.TaskScheduler一起在我的控制台应用程序中启动一个新线程,其中线程的功能是检查是否已添加一个项目一个队列。将项目添加到队列时,它会对其进行处理。

因此队列包含要发送的电子邮件,一旦将电子邮件添加到队列,电子邮件将通过多个客户端发送。每个发送都是并行完成的。

我有这个间歇性的问题,其中新线程在某些时候发生以下异常:

[System.Threading.ThreadAbortException] = {无法计算表达式,因为代码已优化或本机框位于调用堆栈之上。}

调试时我无法获得任何进一步的信息,因为堆栈中的所有属性都有“无法评估表达式,因为代码已优化或本机框架位于调用堆栈之上。”

在互联网上寻找解决方案,我发现这是在执行response.redirect时出现的问题,但我在代码中没有这样做。如果我尝试调试,则此错误发生的位置不一致。以下是我用来创建工厂并启动新线程的代码:

    this.taskFactory = new TaskFactory(TaskScheduler.Current);
    this.taskFactory.StartNew(this.DequeueMessage, state, TaskCreationOptions.LongRunning);

有没有人指出为什么我可能会收到此错误以及有关如何解决此问题的任何提示?

1 个答案:

答案 0 :(得分:3)

获得ThreadAbortException的唯一原因是因为在线程上调用了Thread.Abort。如果您不是手动执行此操作,则会在客户端应用程序终止时发生这种情况。当事情被回收时,它也会发生在托管环境中。如果您提供更多详细信息,可以提供更具体的答案。