c# - System.Threading.ThreadAbortException 在新线程中引发

标签 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] = {无法计算表达式,因为代码已优化或 native 框架位于调用堆栈顶部。}

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

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

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

有谁能告诉我为什么我会收到此错误以及如何修复它吗?

最佳答案

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

关于c# - System.Threading.ThreadAbortException 在新线程中引发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11527960/

相关文章:

.net - Axum vs TPL,异步

c# - 无法在 Vista x64 中的 C# 应用程序中加载 C++ DLL

c# - 如何从 MaskedTextBox 获取原始文本?

.net - 泛型 hell 或在 .NET 中进行程序集级别类型参数化(程序集范围泛型)需要什么

c# - 检查字符串是否只包含 '&' 个字符

c# - 如何在 C# 中安装和使用 Emgu CV?

c# - 使用任务的经典永无止境的线程循环?

.net - 等待多个输入时如何使用 TPL TransformBlock?

c# - 如何在GridView EditTemplate中设置DropDownList的SelectedValue

c# - 如何处理/强制执行单实例线程