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() в моем коде!

0 ответов

Другие вопросы по тегам