Асинхронные операции

Некоторые операции баз данных, например выполнение команд, могут занимать значительное количество времени. В таких случаях однопотоковые приложения должны блокировать другие операции и ожидать завершения команды перед возобновлением собственных операций. В противоположность этому при назначении длительной операции в фоновый поток основной поток может оставаться активным в течение всей операции. Например, в приложении Windows делегирование длительной операции в фоновый поток позволяет потоку пользовательского интерфейса оставаться в рабочем процессе во время выполнения операции.

.NET Framework предоставляет несколько асинхронных шаблонов конструирования, которые разработчики могут использовать для извлечения преимуществ из фоновых потоков и освобождает пользовательский интерфейс высокоприоритетных потоков от выполнения других операций. ADO.NET поддерживает те же шаблоны конструирования в его классе SqlCommand. В частности, методы BeginExecuteNonQuery, BeginExecuteReaderи BeginExecuteXmlReader, связанные с методами EndExecuteNonQuery, EndExecuteReader и EndExecuteXmlReader, обеспечивают асинхронную поддержку.

Примечание.

Асинхронное программирование является основной возможностью .NET Framework, а ADO.NET пользуется всеми преимуществами стандартных шаблонов конструирования. Дополнительные сведения о разных видах асинхронной техники, доступных разработчикам, см. в статье Асинхронный вызов синхронных методов.

Хотя использование асинхронной техники при помощи возможностей ADO.NET не требует какого-либо дополнительного специального рассмотрения, имеется большая вероятность того, что большинство разработчиков будет использовать асинхронные возможности в ADO.NET, а не в других областях .NET Framework. Важно знать о преимуществах и проблемах создания многопотоковых приложений. В приведенных в этом разделе примерах указываются некоторые важные проблемы, которые необходимо учитывать при создании приложений с многопоточной функциональностью.

В этом разделе

Приложения Windows, использующие обратные вызовы
Содержит пример, демонстрирующий безопасное выполнение асинхронной команды с правильной обработкой взаимодействия с формой и ее содержимым из отдельного потока.

Приложения ASP.NET, использующие дескрипторы ожидания
Содержит пример, демонстрирующий, как выполнять несколько одновременных команд со страницы ASP.NET, используя дескрипторы ожидания для управления операцией при завершении всех команд.

Выполнение опросов в консольных приложениях
Содержит пример, демонстрирующий использование опроса для ожидания завершения выполнения асинхронной команды из консольного приложения. Этот метод также допустимый в библиотеке классов или другом приложении без пользовательского интерфейса.

См. также