2

我目前在.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);

有没有人知道我为什么会收到这个错误以及如何修复它的任何提示?

4

1 回答 1

3

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

于 2012-07-17T18:02:59.050 回答