none
Потоки в C# RRS feed

  • Вопрос

  • Win сервис подкачивает данные. По таймеру вызывается поток подкачки. Метод не реинтерабельный и одновременно в двух потоках выполняться не может.

    Вот код, который выполняется по таймеру:

    if (!isReceivePositionsRun)
    {
     isReceivePositionsRun = true;
     ReceivePositions();
     isReceivePositionsRun = false;
    }
    else
    {
     Logger.Log.Warn("Previouse iteration is still running!");
    }

    Возникают ситуации, когда после сбоя (исключение, которое обрабатывается) в ReceivePositions все последующие попытки выполнить код видят, что предыдущая итерация не завершена.

    Если есть идеи почему бы это могло быть, был бы очень признателен!

    9 февраля 2013 г. 18:36

Ответы

  • попробуйте так:
    if (!isReceivePositionsRun)
    {
    try
    {
     isReceivePositionsRun = true;
     ReceivePositions();
    }
    finally
    {
     isReceivePositionsRun = false;
    }
    }
    else
    {
     Logger.Log.Warn("Previouse iteration is still running!");
    }

    • Предложено в качестве ответа Abolmasov Dmitry 12 февраля 2013 г. 13:26
    • Помечено в качестве ответа Abolmasov Dmitry 18 февраля 2013 г. 11:54
    11 февраля 2013 г. 11:06

Все ответы