我现在正处于DLL地狱,试图让我的代码在不同的应用程序框架内工作。在最长的时间里,我一直在试图理解为什么我的方法在被明确地排入ThreadPool时没有被调用。
最后证明,一个特定的DLL必须与调用方法位于同一个文件夹中,或者无法找到它,ThreadPool线程会无声地死亡或丢弃作业(如忍者)。
显然,解决方案编译得很完美并且没有错误,因为正在构建的DLL正好在另一个文件夹中。这不是第一次ThreadPool线程因为错位的DLL而在我身上静静地死了。
部分代码:
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
}
}
答案 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
}