QueueBackgroundWorkItem, выбрасывающий ThreadAbortException
Я пытаюсь поставить в очередь фонового работника из вызова WebAPI:
public string TestThreadAbortException()
{
InitToolkit(DebugLevel.ERROR, 11937, true); // Initialize Logger, DB etc.
var result = MyMethod(); // Runs through!
DebugController.DoAfter(5.Seconds(), MyAction); // waits 5 seconds, and then calls MyMethod, waiting 20 seconds, but throws ThreadAbortException after 4 to 5 seconds into MyMethod
return result;
}
private string MyMethod()
{
Thread.Sleep(20000);
return "Test";
}
private void MyAction(Logger logger)
{
logger.Log(MyMethod());
}
public static void DoAfter(TimeSpan waitFor, Action<Logger> action)
{
HostingEnvironment.QueueBackgroundWorkItem(async ct =>
{
await Task.Delay(waitFor);
DatabaseLogger logger = new DatabaseLogger();
logger.Log("Executing " + action.Method.Name + ", " + DateTime.Now.ToLongTimeString());
try
{
action(logger);
logger.Log("Successfully executed " + action.Method.Name + ", " + DateTime.Now.ToLongTimeString());
}
catch (Exception e)
{
logger.Log("Error in " + action.Method.Name + ": " + e.Message + ", " + DateTime.Now.ToLongTimeString());
}
finally
{
logger.CloseDatabase();
}
});
}
Это производит следующие журналы:
Executing MyAction, 10:30:51
Error in MyAction: Der Thread wurde abgebrochen., 10:30:55
Но как мне найти ПОЧЕМУ поток был прерван, или как я могу обойти эту проблему? Я это понимаю Abort()
был вызван в теме, но я не понимаю, почему и где - нет вызова Abort()
в моем коде!