После обновления я увидел заоблачное время выполнения приложения. Это транснациональное онлайн-приложение, которое получает запросы и обычно отвечает в период от 40 мс до 500 мс, что является приемлемым. После перехода на способ задач я вижу, что ответ многих транзакций занимает от 4000 мс до даже 38 000 мс, что неприемлемо.
Поток довольно сложен. Он включает в себя синхронный цикл для входящих транзакций, который фактически выполняет простые проверки и вставку в базу данных. После этого выполняются некоторые параллельные действия, и основной цикл переходит к следующей входящей транзакции. Параллельными действиями в основном являются ведение журнала и интенсивная проверка качества данных в базе данных.
Все действия по ведению журнала были инициированы в ThreadPool с помощью
Код: Выделить всё
ThreadPool.QueueUserWorkItem(/*logging action*/)
Код: Выделить всё
Task.Factory.StartNew(/*qc action*/,
TaskCreationOptions.LongRunning | TaskCreationOptions.PreferFairness)
Действия по ведению журнала были переключены на
Код: Выделить всё
Task.Factory.StartNew(/*logging action*/,
CancellationToken.None,
TaskCreationOptions.None,
TaskScheduler.Default)
Код: Выделить всё
Task.Factory.StartNew(/*qc action*/,
CancellationToken.None,
TaskCreationOptions.LongRunning | TaskCreationOptions.PreferFairness,
TaskScheduler.Default)
Существует ли вероятность того, что флаг TaskCreationOptions.PreferFairness в действии проверки качества заставит проверку качества ждать протоколировать действия, даже если этот флаг не установлен при их инициировании?
Подробнее здесь: https://stackoverflow.com/questions/368 ... actory-sta