Запустить и забыть шаблон с помощью BeginNonExecuteQuery () - PullRequest
1 голос
/ 16 ноября 2011

Назначение: Я работаю над нагрузочным тестом, в котором мне нужно, чтобы Sql Server постоянно занимал 100% процессорного времени.

Метод:

  • Я устанавливаю асинхронное соединение, запускаю BeginNonExecuteQuery () и регистрирую обратный вызов. Это простой запрос while (1), который загружает процессор и никогда не возвращает.

Проблема:

  • Бывают случаи, когда команда sql прерывается и вызывается обратный вызов. В таких случаях мне нужно повторить команду sql. В обратном вызове я делаю следующее:

            try
            {
                 // If execution is incomplete, cancel the sqlCommand
                 if (!result.IsCompleted)
                 {
                    command.Cancel();
                 }
                 command.EndExecuteNonQuery(result);
             }
             catch(SqlException ex)
             {}
             finally
             {
                 // if connection closed, reopen
                 // retry sql command anyway
             }
    

Это самый чистый способ сделать это? Я прочитал, что Cancel () не относится к асинхронным командам. И этот EndExecuteNonQuery () блокируется до тех пор, пока команда не завершит выполнение, что в моем случае кажется верным из моих прогонов. Также имеет ли смысл логика повторов?

  • В том же духе я бы хотел добровольно отменить асинхронную команду на полпути после тайм-аута. Будет звонить command.Cancel(); EndNonExecuteQuery(); Работа? Или это снова вызовет обратный вызов?

1 Ответ

1 голос
/ 16 ноября 2011

Основные примеры Cancel, похоже, относятся к reader запросам.Я не знаю, предназначен ли он для использования с асинхронным шаблоном.

Если это не сработает, я подозреваю, что единственный поддерживаемый способ сделать то, что вы хотите здесь, это использовать время ожидания командыТайм-аут после (скажем) 30 секунд и при необходимости повторите его.Как ни странно, я сомневаюсь, что дизайнеры заняли много времени, рассматривая варианты использования, такие как «Мне нужно держать процессор на 100% и никогда не выходить» ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...