Задачи и отмена в .Net — tips & tricks
11 мин
С выходом .NET Framework 4.0 в состав BCL была добавлена библиотека Task Parallel Library (TPL), реализующая параллелизм на основе задач. В основе библиотеки лежат типы
В этой же версии .NET Framework появился мини-framework для кооперативной отмены асинхронных операций. Состоит он из всего трёх типов:
Механизм отмены через
Task и унаследованный от него тип Task. Эти типы являются обёртками для асинхронных операций; они позволяют абстрагироваться от таких технических деталей, как, например, потоки и синхронизировать асинхронные операции друг с другом.В этой же версии .NET Framework появился мини-framework для кооперативной отмены асинхронных операций. Состоит он из всего трёх типов:
CancellationTokenSource— создаёт маркёры отмены (свойствоToken) и обрабатывает запросы на отмену операции (перегруженные методыCancel/CancelAfter).CancellationToken— маркёр отмены; позволяет несколькими способами отслеживать запросы на отмену операции: опросом свойстваIsCancellationRequested, регистрацией callback-функции (через перегруженный методRegister), ожиданием на объекте синхронизации (свойствоWaitHandle).OperationCanceledException— исключение, выброс которого по соглашению означает, что запрос на отмену операции был обработан и операция должна считаться отменённой. Предпочтительный способ генерации исключения — вызов методаCancellationToken. ThrowIfCancellationRequested.
Механизм отмены через
CancellationToken является стандартным для TPL — есть перегрузки методов, принимающих CancellationToken, исключения OperationCanceledException специальным образом обрабатываются и т.д. Однако, как и в любом другом API, есть свои тонкости, хитрости, best practices.

Некоторое время назад мне потребовалось «красиво» оформить логи бесед в жаббире. Поскольку рисовать я не умею вовсе, я обратился за подмогой к мирозданию. Поиск по готовым решениям открыл для меня малоизвестную, но, безусловно, заслуживающую внимания библиотечку. Строго говоря, это не библиотека. Это тщательно написанная и выверенная каскадная таблица стилей, позволяющая имитировать iPhone-интерфейс в браузерах.
Ради интереса, прошелся поиском по хабру, и обнаружил, что тут не освещен один очень полезный сервис: