Скачать презентацию C 5 и асинхронное программирование Асинхронность Асинхронный Скачать презентацию C 5 и асинхронное программирование Асинхронность Асинхронный

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

  • Количество слайдов: 14

C# 5 и асинхронное программирование C# 5 и асинхронное программирование

Асинхронность Асинхронный вызов – это такой вызов функции при котором программа не дожидается выполнения Асинхронность Асинхронный вызов – это такой вызов функции при котором программа не дожидается выполнения метода вызванного ранее перед запуском последующего

Главное — мы потеряем возможность взаимодействия с пользовательским интерфейсом до завершения операции. Зачем так Главное — мы потеряем возможность взаимодействия с пользовательским интерфейсом до завершения операции. Зачем так усложнять жизнь разработчикам? Дело в том, что пользовательский интерфейс обрабатывает метод синхронно и, передав обработку какому-либо методу, не может выполнять действия пользователя, пока этот метод не будет завершен. Асинхронные операции достаточно легко решают эту проблему.

 Создадим простое WPF-приложение и добавим кнопку с текстовым полем в окно Main. Window. Создадим простое WPF-приложение и добавим кнопку с текстовым полем в окно Main. Window. xaml Сетевое взаимодействие должно выполняться асинхронно Title="Main. Window" Height="600" Width="800">

 Синхронный вызов Download. String public partial class Main. Window : Window Сетевое взаимодействие Синхронный вызов Download. String public partial class Main. Window : Window Сетевое взаимодействие должно выполняться асинхронно { public Main. Window() { Initialize. Component(); } private void Button_Click(object sender, Routed. Event. Args e) { var client = new Web. Client(); txt. Result. Text = client. Download. String("http: //akhmed. ru"); } }

 Асинхронный вызов с обработкой результата в отдельном методе private void Button_Click(object sender, Routed. Асинхронный вызов с обработкой результата в отдельном методе private void Button_Click(object sender, Routed. Event. Args e) Сетевое взаимодействие должно выполняться асинхронно { var client = new Web. Client(); client. Download. String. Completed += Client. Download. String. Completed; client. Download. String. Async(new Uri("http: //akhmed. ru")); } void Client. Download. String. Completed(object sender, Download. String. Completed. Event. Args e) { txt. Result. Text = e. Result; }

 Для сокращения объема кода воспользуемся анонимными методами. Сетевое взаимодействие должно выполняться асинхронно private Для сокращения объема кода воспользуемся анонимными методами. Сетевое взаимодействие должно выполняться асинхронно private void Button_Click(object sender, Routed. Event. Args e) { var client = new Web. Client(); client. Download. String. Completed += (s, a) => { txt. Result. Text = a. Result; }; client. Download. String. Async(new Uri("http: //akhmed. ru")); }

Ключевые слова async и await в C# 5 Ключевые слова async и await в C# 5

 Рассмотрим, как наш пример WPF-приложения будет выглядеть с учетом новых возможностей. private async Рассмотрим, как наш пример WPF-приложения будет выглядеть с учетом новых возможностей. private async void Button_Click(object sender, Routed. Event. Args e) Два ключевых слова: async и await { var client = new Web. Client(); var uri = new Uri("http: //akhmed. ru"); txt. Result. Text = await client. Download. String. Task. Async(uri); } В данном примере кода мы загружаем данные с помощью асинхронного метода Download. String. Task. Async, который возвращает объект класса Task. Мы выполняем асинхронное ожидание завершения задачи (с помощью ключевого слова await), а после этого получаем результат и отображаем его в текстовом поле.

Два ключевых слова: async и await Одно из самых значительных и полезных изменений в Два ключевых слова: async и await Одно из самых значительных и полезных изменений в Windows 8 — полный отказ от синхронных операций везде, где потенциально возможно долгое выполнение. Чтение файлов, загрузка и передача данных — практически все работает асинхронно. Рассмотрим, как реализовать загрузку данных по http в Windows Store-приложении. private async void Button_Click(object sender, Routed. Event. Args e) { var client = new Http. Client(); txt. Result. Text = await client. Get. String. Async("http: //habr. ru"); }

 Напишем код с ключевыми словами async и await, подсчитывающий сумму размера страниц трех Напишем код с ключевыми словами async и await, подсчитывающий сумму размера страниц трех сайтов private async void Button_Click(object sender, Routed. Event. Args e) { var content. Habrahabr = await new Более сложный пример Http. Client(). Get. String. Async("http: //habrahabr. ru"); var content. Yandex = await new Http. Client(). Get. String. Async("http: //yandex. ru"); var content. Mail = await new Http. Client(). Get. String. Async("http: //mail. ru"); var length = content. Habrahabr. Length + content. Yandex. Length + content. Mail. Length; txt. Result. Text = length. To. String(); }

 Класс Task предоставляет достаточно богатые возможности для работы с асинхронными задачами. Допустим, необходимо Класс Task предоставляет достаточно богатые возможности для работы с асинхронными задачами. Допустим, необходимо организовать более эффективное скачивание данных, загружая страницы не последовательно, а параллельно. Класс Task в том числе предоставляет метод When. All, который позволяет нам ожидать выполнения всех переданных ему задач (листинг П 2. 11). private async void Button_Click(object sender, Routed. Event. Args e) { var task. Habrahabr = Класс Task и метод When. All new Http. Client(). Get. String. Async("http: //habrahabr. ru"); var task. Yandex = new Http. Client(). Get. String. Async("http: //yandex. ru"); var task. Mail = new Http. Client(). Get. String. Async("http: //mail. ru"); await Task. When. All(task. Habrahabr, task. Yandex, task. Mail); var length = task. Habrahabr. Result. Length + task. Yandex. Result. Length + task. Mail. Result. Length; txt. Result. Text = length. To. String(); } Теперь страницы загружаются существенно быстрее. Мы не ждем окончания загрузки первой страницы, чтобы начать скачивание второй и т. д.

Итоги Итоги

Итоги Ключевые слова async и await в C# 5 позволяют писать асинхронный код в Итоги Ключевые слова async и await в C# 5 позволяют писать асинхронный код в синхронном стиле. Реальная работа осуществляется с помощью классов задач Task и Task. В Windows 8 все операции, которые потенциально могут выполняться длительное время (более 50 мс), являются асинхронными, поэтому вам в любом случае придется столкнуться с асинхронным программированием, даже если вы раньше писали исключительно синхронный код. Хочется отметить, что асинхронность - это не синоним параллельности.