C# 5.0 Взгляд в будущее Язык формирует наш способ мышления и определяет то, о чем мы можем мыслить. Б. Л. Ворф Специально для TulaDev.NET.

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



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

Высокоуровневые методы информатики и программирования Лекция 9 Делегаты.
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
Артем Шабаршин Артем Шабаршин Что нового в среде Visual Studio 11 beta для программистов.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Click to edit Master title style IDK1011 Основы программирования Диалоговые окна Чтение файлов и директорий.
Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Гайдар Магдануров Microsoft.
Гайдар Магдануров Microsoft.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Тема: Управление потоком в PHP Изучить возможности языка PHP при решении задач, требующих использования условного оператора. Рассмотреть примеры управления.
Лекция 13. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Циклы в C++. Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. В этом уроке мы научимся программировать.
EXtreme Programming XP Тема 4. XP Тест – это процедура, которая позволяет либо подтвердить, либо опровергнуть работоспособность кода. Тесты должны быть.
Источники данных LINQ РУБД. LINQ (Language Integrated Query, язык интегрированных запросов ) это технология, которая позволяет разработчикам формировать.
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – локализация ресурсов приложения Из цикла лекций «Технологии.
Полиморфизм Полиморфизм (polymorphism) - последний из трех "китов", на которых держится объектно-ориентированное программирование Слово это можно перевести.
Транксрипт:

C# 5.0 Взгляд в будущее Язык формирует наш способ мышления и определяет то, о чем мы можем мыслить. Б. Л. Ворф Специально для TulaDev.NET

О чем поговорим Я расскажу об одном интересном нововведении, которое планируется сделать в C# 5.0 Объясню внутреннюю мотивацию разработчиков.NET Рассмотрим примеры ситуаций, в которых полезны новые возможности Разберем конкретный пример TulaDev.NET

История развития C# C# 1.0 Managed code TulaDev.NET

История развития C# C# 1.0 Managed code C# 2.0 Iterators / Generics / Anonymous TulaDev.NET

История развития C# C# 1.0 Managed code C# 2.0 Iterators / Generics / Anonymous C# 3.0 LINQ / Lambda TulaDev.NET

История развития C# C# 1.0 Managed code C# 2.0 Iterators / Generics / Anonymous C# 3.0 LINQ / Lambda C# 4.0 Dynamic / PLINQ TulaDev.NET

История развития C# C# 1.0 Managed code C# 2.0 Iterators / Generics / Anonymous C# 3.0 LINQ / Lambda C# 4.0 Dynamic / PLINQ C# 5.0 TAP (Task-based asynchronous pattern) TulaDev.NET

Зачем нужна асинхронность? var document = FetchDocument(url); ArchiveDocument(document); FetchDocumentAsync(url, document => { ArchiveDocument(document); }); TulaDev.NET

Зачем нужна асинхронность? FetchDocumentAsync(url1, document => { ArchiveDocument(document); }); FetchDocumentAsync(url2, document => { ArchiveDocument(document); }); FetchDocumentAsync(url3, document => { ArchiveDocument(document); }); Асинхронность позволяет рационально использовать ресурсы процессора в пределах одного потока TulaDev.NET

Асинхронность против многопоточности Асинхронность позволяет производить параллельную обработку в одном потоке Следовательно асинхронный код не будет использовать все ядра вашего процессора Но, так как поток один, то вы можете делать параллельную обработку без блокировок (lock) TulaDev.NET

Где нужна асинхронность? В первую очередь в обработке событий пользовательского интерфейса SilverLight (JavaScript, например, язык только с поддержкой асинхронности) При программировании мультиплексоров и аналогичных им алгоритмов, использующих медленные внешние ресурсы: сеть, диски, другие накопители TulaDev.NET

Сопрограммы «Подпрограмма является частным случаем сопрограммы». Д. Кнут. Пример программы, использующей 2 сопрограммы: var q := new queue coroutine produce loop while q is not full create some new items add the items to q yield to consume coroutine consume loop while q is not empty remove some items from q use the items yield to produce При первом вызове сопрограммы, выполнение начинается со стартовой точки сопрограммы. Однако при последующих вызовах выполнение продолжается с точки последнего возврата. TulaDev.NET

Как это выглядит в 5.0? Возьмем код var document = FetchDocument(url); ArchiveDocument(document); Его можно преобразовать в асинхронный вариант Task task = FetchDocumentAsync(url); task.ContinueWith(document => { ArchiveDocument(document); }); В C# 5.0 мы можем использовать другой синтаксис ArchiveDocument(await FetchDocumentAsync(url)); TulaDev.NET

Как это выглядит в 5.0? Первая магия C# await task Означает конструкция буквально следующее: Если таск, для которого выполняется await еще не завершен, то установить остаток текущего метода как продолжение (continuation) таска Затем вернуть управление вызывающему методу Продолжение метода будет вызвано таском, когда он будет завершен TulaDev.NET

Как это выглядит в 5.0? Вторая магия C# 5.0 – модификатор метода async Означает буквально следующее: Этот метод содержит конструкции await, так что компилятор должен преобразовать его таким образом, чтобы асинхронные операции могли продолжить выполнение этого метода Метод может быть продолжен не с произвольной точки, а только с тех точек, которые запоминают конструкции await TulaDev.NET

Как это выглядит в 5.0? Конструкция await может быть указана только внутри async метода Методы async могут возвращать только void, Task или Task При этом void и Task методы не могут возвращать ничего внутри своей реализации. То есть содержать только return; Task методы могут внутри содержать только конструкцию return ; TulaDev.NET

Синхронный пример Document FetchDocument(string url) { HttpRequest request = (HttpRequest) WebRequest.Create(url); var response = request.GetResponse(); var stream = response.GetResponseStream(); const int BUFFER_SIZE = 512; int count = 0; var bytes = new List (); var bytes = new buffer[BUFFER_SIZE]; do { count = stream.Read(buffer, 0, BUFFER_SIZE); bytes.AddRange(buffer, 0, count); } while (count > 0); return new Document(bytes); } void SomeButton_Click() { var document = FetchDocument(url); ArchiveDocument(document); } TulaDev.NET Thread

Асинхронный пример async Task FetchDocument(string url) { HttpRequest request = (HttpRequest) WebRequest.Create(url); var response = await request.GetResponseAsync(); var stream = response.GetResponseStream(); const int BUFFER_SIZE = 512; int count = 0; var bytes = new List (); var bytes = new buffer[BUFFER_SIZE]; do { count = await stream.ReadAsync(buffer, 0, BUFFER_SIZE); bytes.AddRange(buffer, 0, count); } while (count > 0); return new Document(bytes); } async void SomeButton_Click() { var document = await FetchDocument(url); ArchiveDocument(document); } TulaDev.NET Thread

Лучше один раз увидеть... Давайте рассмотрим пример в VisualStudio TulaDev.NET

Что еще нужно знать? Конструкция await применима не только для Task. Но и для любого выражения, для которого определен метод GetAwaiter(), возвращающий тип, для которого можно вызвать методы BeginAwait(Action) и EndAwait() Асинхронный синтаксис сохраняет интуитивно понятный способ обработки исключений для вашего кода Предварительная версия компилятора C# 5.0 пока еще совсем предварительная. То есть в ней может поменяться все, вплоть до синтаксиса TulaDev.NET

Источник информации Здесь можно скачать предварительную версию Async CTP (Community Technology Preview) Есть ссылки на документацию, примеры и обсуждения в блогах Много видео с выступлениями дизайнеров C# Можно подробно прочитать о TAP в C# 5.0 по- русски TulaDev.NET

Контактная информация ICQ: TulaDev.NET