如何判断ThreadPool线程是否以静默方式死亡

时间:2014-03-04 15:45:45

标签: c# threadpool

我现在正处于DLL地狱,试图让我的代码在不同的应用程序框架内工作。在最长的时间里,我一直在试图理解为什么我的方法在被明确地排入ThreadPool时没有被调用。

最后证明,一个特定的DLL必须与调用方法位于同一个文件夹中,或者无法找到它,ThreadPool线程会无声地死亡或丢弃作业(如忍者)。

显然,解决方案编译得很完美并且没有错误,因为正在构建的DLL正好在另一个文件夹中。这不是第一次ThreadPool线程因为错位的DLL而在我身上静静地死了。

  1. 当我的帖子消失时,究竟发生了什么?
  2. 我怎么知道将来会发生这种情况?是否会有任何机会出现日志文件?
  3. 部分代码:

    protected void Enqueue()
    {
        try
        {
            Task.Run(() => Process());
        }
        catch (Exception ex)
        {
            // Logging code here (no issues)
        }
    }
    
    protected void Process()
    {
        // A breakpoint here will never be called
    
        try {       
            // Code that calls into offensive DLL
        }
        catch (Exception e)
        {
            // Logging code
        }
    }
    

1 个答案:

答案 0 :(得分:0)

假设Process包含对DLL的调用。如果是这样,则在进程的JIT上抛出异常,因此您无法在Process中捕获它。在调用DLL之前再使用一层间接,以确保能够记录它。

protected void Enqueue()
{
    try
    {
        Task.Run(() => Process());
    }
    catch (Exception ex)
    {
        // Logging code here (no issues)
    }
}

protected void Process()
{
    try {
        Process2();
    }
    catch (Exception e)
    {
        // Logging code
    }
}

protected void Process2()
{
            // Code that calls into offensive DLL
}