Msdevcon.ru#msdevcon. Работа с асинхронными операциями в Win RT Иван Бодягин ABBYY.

Презентация:



Advertisements
Похожие презентации
Microsoft TechDays Павел Маслов MVP, Directory Services.
Advertisements

Microsoft TechDays Людмила Шайкина Quarta Consulting
Новые продукты Microsoft для повышения качества и эффективности образования Амит Миталь Старший вице-президент Microsoft по развитию социальных проектов.
Microsoft TechDays Евгений Марченков Эксперт по технологиям разработки ПО Microsoft.
Msdevcon.ru#msdevcon. OPEN SOURCE РЕШЕНИЯ В ОБЛАКЕ WINDOWS AZURE Воркачёв Владимир.
На примере одного дня из жизни руководителя. Поездка в Милан.
Microsoft TechDays Леонид Шапиро MCT ЦКО «Специалист»
Msdevcon.ru#msdevcon. ПРОФИЛИРОВАНИЕ WINDOWS STORE ПРИЛОЖЕНИЙ Филипп Панфилов Mail.Ru Group.
Microsoft TechDays Николай Миляев консультант Microsoft.
Microsoft TechDays Никоноров Евгений разработчик EPAM Systems.
Microsoft TechDays Заграничнов Александр Microsoft.
Валерия Казбан, менежер по работе с государственным сектором, Майкрософт Украина Опыт внедрения концепции е- управления Майкрософт Украина: локальные особенности.
Microsoft TechDays Иван Андреев Microsoft TechDays Игра состоит из: Графика Управление AI Звук.
Microsoft TechDays Константин Трещев MCITP: Enterprise Administrator
Msdevcon.ru#msdevcon. ВЗГЛЯД РАЗРАБОТЧИКА: WINDOWS AZURE IAAS Воркачёв Владимир.
Microsoft TechDays Александр Неволин Nevlabs кандидат технических наук.
Taтьяна Знаменская Здравоохранение и социальные службы. Microsoft Центральная Европа.
Будущее режима /hosting в Exchange Иван Макаров Менеджер по маркетингу Exchange Microsoft Россия.
DevCon12 // msdevcon.ru #msdevcon мая, 2012 г. Microsoft.
Microsoft TechDays Евгений Марченков Эксперт по технологиям разработки ПО Microsoft.
Транксрипт:

msdevcon.ru#msdevcon

Работа с асинхронными операциями в Win RT Иван Бодягин ABBYY

Содержание Асинхронность Win RT Реализация асинхронности в Win RT async/await + Task Сценарии

Асинхронность

Закон Мура перестал приносить дивиденды Рост числа транзисторов не приводит к линейному росту производительности В некоторых сценариях без асинхронности не обойтись Пользовательский интерфейс Массовая обработка запросов

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

Решения Делегаты и события Ручное управление потоками, логика серьезно усложняется Continuation Passing Style Позволяет сделать логику линейной, но многословно Reactive Extension Запросы к событиям – идеальное решение, но в малом числе сценариев async / await Делает логику линейной и не обременяет синтаксисом

Win RT

Альтернативный / эволюционный API Объектно-ориентированный (что бы под этим не понимали) Поддержка метаданных «нативная» поддержка управляемых языков Некоторые операции сделаны исключительно асинхронными Стимулирует разработчиков писать код не блокирующий UI

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

Матрица операций ДаНет ДаIAsyncOperationWithProgressIAsyncActionWithProgress НетIAsyncOperationIAsyncAction Result Progress

DEMO Длительные операции и UI

Как это работает?

Синтаксис async - ключевое слово перед методом содержащим асинхронные операции Этот метод содержит асинхронные операции и будет изменен компилятором таким образом, чтобы после асинхронного вызова метод мог быть продолжен с нужного места. await – ключевое слово перед асинхронной операцией Остаток метода сделать «продолжением» (continuation) и вернуть управление вызывающему потоку. «продолжение» будет вызвано тогда, когда ожидаемый вызов завершится.

Awaitable pattern Должен быть реализован метод GetAwaiter() Метод должен возвращать класс реализующий bool IsCompleted { get; } void OnCompleted(Action continuation); TResult GetResult();

Преобразования компилятора

Контекст синхронизации await возвращает управление в «текущий контекст синхронизации» SynchronizationContext.Current TaskSheduler.Current Если SynchronizationContext определен, (ASP.Net, WPF, WinForms, SL, Win RT…), то он используется и есть гарантия корректной работы с UI Если не определен, то берется поток из ThreadPool-а

Поддержка Task Parallel Library Реализовать поддержку await в классе можно двумя способами Реализовать полноценный await pattern Воспользоваться TaskCompletionSource Для всех IAsync классов, уже есть соответствующие методы расширения public static Task AsTask (…)

Проблема выбора await SomeAsync() vs await SomeAsync().AsTask() Встроенный GetAwaiter реализует.AsTask().GetAwaiter() Использование AsTask дает больше контроля

AsTask() Поддержка CancellationToken

AsTask() Поддержка IProgress

AsTask() Настройки маршаллинга По умолчанию используется контекст синхронизации для передачи управления в UI поток после await операции WinRTSynchronizationContext

AsTask() Использование цепочек продолжений… и комбинаторов

Заключение Асинхронные операции очень важны, особенно в UI В Win RT некоторые операции могут быть только асинхронными Все эти операции реализуют набор интерфейсов и эти интерфейсы поддерживают await паттерн (await/async) Await паттерн позволяет линейно писать асинхронный код В простых сценариях await можно использовать напрямую с этими операциями, для сложных сценариев есть AsTask()

Контакты Иван Бодягин ABBYY

© 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.