Обнаружение команды отменяет в асинхронном BeginExecuteReader

Более простой способ сделать это - использовать ("*"), который дает все прямые дочерние элементы узла контекста.

Реализация:

WebDriver driver = DriverFactory.getWebDriver()
//get the parent element
WebElement slotsGrid =  driver.findElement(By.id('js-' + numOfSlots + '-grid'))
//use the parent element to get all the immediate children
List<WebElement> children = slotsGrid.findElements(By.xpath("*"))
7
задан np-hard 13 March 2009 в 14:26
поделиться

2 ответа

. Я стерла и перезапустила весь мой ответ: вы наткнулись на хороший случай противоречивой документации и предупреждений ...

Согласно .NET 2.0 MSDN Документация для SqlCommand.Cancel «Метод Cancel нельзя использовать для отмены ожидающей асинхронной операции». Однако та же самая документация для .NET 3.5 не содержит этого предупреждения - несмотря на то, что в остальном она идентична документации 2.0.

Я бы посоветовал следовать соглашениям, изложенным в Вызов синхронных методов асинхронно , который предназначен для делегата. BeginInvoke (не Control.BeginInvoke!) И Delegate.EndInvoke, но, скорее всего, уместно в вашем случае.

Методы с именем «Begin ... Async», которые возвращают IAsyncResult и имеют соответствующий метод «End ...», имеют потенциал для создания утечки ThreadPool. Самый простой способ предотвратить утечку - это всегда вызывать соответствующий метод «End ...».

Причина в том, что при вызове Begin ... Async он получает поток из ThreadPool и (обычно) выполняет синхронную версию метода в рабочем потоке; в вашем случае ExecuteReader (). Возвращаемое значение этого вызова или любые исключения, возникающие во время этого вызова, не возвращаются в основной поток до тех пор, пока не будет вызван End ... - если вы никогда не вызываете End, тогда результаты / исключения никогда не возвращаются, а поток ThreadPool никогда не освобождается

Короче говоря, вы, вероятно, в безопасности, если обязательно вызовете EndExecuteReader () и обработаете ожидаемое исключение. Поскольку документация противоречива и расплывчата, я начал обсуждение на форумах MSDN Feedback .

8
ответ дан 7 December 2019 в 01:27
поделиться

Имейте беглый взгляд на http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98217, где точно об этом поведении сообщили.

Таким образом, похоже, что необходимо просто поймать это определенное исключение добавленный EndExecuteReader и проигнорировать его.

2
ответ дан 7 December 2019 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: