我現在正處於DLL地獄中,試圖讓我的代碼在不同的應用程序框架內工作。在最長的時間裏,我試圖瞭解爲什麼我的方法在被明確排入ThreadPool時未被調用。如何判斷ThreadPool線程是否無聲無息地死亡
它最終證明是一個特定的DLL必須與調用方法位於同一個文件夾中,或者未能找到它,ThreadPool線程會死亡或無聲無息地放棄工作(如忍者)。
顯然,解決方案編譯完美,並沒有錯誤,因爲正在構建的DLL,只是爲了不同的文件夾。這不是第一次由於錯誤放置的DLL而導致ThreadPool線程在我身上無聲無息地死亡。
- 當我的線程消失時,究竟發生了什麼?
- 我怎麼知道這在未來發生?有沒有可能的日誌文件?
某些代碼:
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
}
}
您是否嘗試在工作線程入口函數週圍放置try/catch,並記錄錯誤以查看未處理的可能會導致線程死亡的異常? – LB2
訂閱Application.ThreadException .... http://stackoverflow.com/questions/8836766/c-sharp-catching-exception-which-is-occuring-on-threadpool ---- http://stackoverflow.com/questions/5714520/why-exceptions-raised-on-threadpool-thread-not-handling-by-main-thread-in-cs –
@ LB2不應該推翻這個過程嗎? –