簡體   English   中英

C# ThreadAbortException,查找誰在調用中止

[英]C# ThreadAbortException, find who is calling the abort

我有作為存儲過程實現的 C# 方法。 存儲過程從 SQL 服務器運行

該方法只是啟動一個單獨的本機進程,然后使用HasExitedWaitForExit(500)方法循環,直到本機進程退出。

在某些情況下,本機進程可能需要幾個小時才能退出,當它退出時,C# 方法會間歇性地收到 ThreadAbortException。 下面是堆棧

System.Threading.ThreadAbortException: Thread was being aborted.
   at System.Threading.WaitHandle.WaitOneNative(SafeHandle waitableSafeHandle, UInt32 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
   at System.Threading.WaitHandle.InternalWaitOne(SafeHandle waitableSafeHandle, Int64 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
   at System.Threading.WaitHandle.WaitOne(Int32 millisecondsTimeout, Boolean exitContext)
   at System.Diagnostics.Process.WaitForExit(Int32 milliseconds)
   at MYSQLCLRLib.MYAPP.MyMethod(String operation, String executable, String bkParam, String stdin)

我檢查了我的代碼,沒有調用Thread.Abort() 我如何確定誰以及為什么發送中止?

如果您粘貼一些 try catch 塊的片段,那就太好了。 但在你的情況下 thread.Abort() 或 Abort 應該在 try 塊中的某個地方。假設,如果你的線程在 try 塊中你仍然想中止那個線程,那么不能到處寫 abort。

try
{
.. Aborting thread here

}
catch(ThreadAbortException)
{
throw;
}
catch(Exception ex)
{
..Exception code
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM