Дипломы, курсовые, рефераты, контрольные...
Срочная помощь в учёбе

Эволюция. 
Научно-педагогическая практика

РефератПомощь в написанииУзнать стоимостьмоей работы

Очень важно понимать разницу между потоком (Thread) и задачей (Task), которые сильно отличаются. Thread (поток) представляет собой инкапсуляцию потока выполнения, в то время как Task является работой (или просто асинхронной операцией), которая может быть выполнена параллельно. Для выполнения задачи используется свободный поток из пула потоков. По завершении работы поток будет возвращен обратно… Читать ещё >

Эволюция. Научно-педагогическая практика (реферат, курсовая, диплом, контрольная)

По мере развития .NET Framework было много нововведений и подходов для запуска асинхронных операций. Первым решением для асинхронных задач стал подход под названием APM (Asynchronous Programming Model). Он основан на асинхронных делегатах, которые используют пару методов с именами BeginOperationName и EndOperationName, которые соответственно начинают и завершают асинхронную операцию OperationName. После вызова метода BeginOperationName приложение может продолжить выполнение инструкций в вызывающем потоке, пока асинхронная операция выполняется в другом. Для каждого вызова метода BeginOperationNameв приложении также должен присутствовать вызов метода EndOperationName, чтобы получить результаты операции.

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

В версии 2.0 была введена новая модель под названием EAP (Event-based Asynchronous Pattern).

Класс, поддерживающий асинхронную модель, основанную на событиях, будет содержать один или несколько методов MethodNameAsync. Он может отражать синхронные версии, которые выполняют то же действие с текущим потоком. Также в этом классе может содержаться событие MethodNameCompleted и метод MethodNameAsyncCancel (или просто CancelAsync) для отмены операции. Данный подход распространен при работе с сервисами.

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

Обработка исключений и результаты асинхронной операции доступны только в обработчике события посредством соответствующих свойств параметра: Error и Result.

В .NET Framework 4.0 была введена усовершенствованная модель под названием TAP (Task-based Asynchronous Model), которая основана на задачах. На них также построены TPL и PLINQ, но о них поговорим подробно в следующий раз.

Данная реализация асинхронной модели базируется на типах Task и TaskSystem.Threading.Tasks, которые используются для предоставления произвольных асинхронных операций. TAP — это рекомендуемый асинхронный шаблон для разработки новых компонентов.

Очень важно понимать разницу между потоком (Thread) и задачей (Task), которые сильно отличаются. Thread (поток) представляет собой инкапсуляцию потока выполнения, в то время как Task является работой (или просто асинхронной операцией), которая может быть выполнена параллельно. Для выполнения задачи используется свободный поток из пула потоков. По завершении работы поток будет возвращен обратно в пул, а пользователь класса получит результат задачи.

Если вам нужно запустить длительную операцию и вы не хотите надолго блокировать один из потоков пула, то можете это сделать при помощи параметра TaskCreationOptions.LongRunning. Создавать и запускать задачи можно разными способами, и часто непонятно, какой из них выбрать. Разница, в основном, лишь в удобстве использования и количестве параметров с настройками, которые доступны в том или ином способе.

В последних версиях фреймворка появились новые возможности на основе все тех же задач, которые упрощают написание асинхронного кода и делают его более читабельным и понятным. Для этого введены новые ключевые слова async и await, которыми помечаются асинхронные методы и их вызовы.

Асинхронный код становится очень похожим на синхронный: мы просто вызываем нужную операцию и весь код, который следует за ее вызовом, автоматически будет завернут в некий «колбек», который вызовется после завершения асинхронной операции.

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

Показать весь текст
Заполнить форму текущей работой