Асинхронность и контексты синхронизации C#

IDpowers.com

Наличие контекста синхронизации играет важную роль при отправке признаков продолжения. Существует несколько других, более тонких способов взаимодействия с контекстами синхронизации в случае асинхронных функций, возвращающих void. Они являются не прямым результатом расширений компилятора С#, а функцией типов Async*MethodBuilder в пространстве имен System.CompilerServices, которое компилятор использует при расширении асинхронных функций.

Отправка исключений

В обогащенных клиентских приложениях общепринято полагаться на событие централизованной обработки исключений (Application. DispatcherUnhandled Exception в WPF) для учета необработанных исключений, сгенерированных в потоке пользовательского интерфейса. В приложениях ASP.NET похожую работу делает Application_Error в global. asax. Внутренне они функционируют, инициируя события пользовательского интерфейса (или конвейера методов обработки страниц в случае ASP.NET) в собственном блоке try/catch.

Асинхронные функции верхнего уровня затрудняют все это. OperationStarted И OperationCompleted

При наличии контекста синхронизации асинхронные функции, возвращающие void, также вызывают его метод OperationStarted во время входа в функцию и метод OperationCompleted, когда функция завершается. Эти методы используются
контекстом синхронизации ASP.NET для обеспечения последовательного выполнения внутри конвейера обработки страниц.

Переопределение этих методов удобно при написании специального контекста синхронизации для проведения модульного тестирования асинхронных методов, возвращающих void. Данная тема обсуждается в блоге, посвященном параллельному программированию в.NET, по адресу http://blogs.msdn.com/b/pfxteam.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *