Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
C# 5.0 Взгляд в будущее Язык формирует наш способ мышления и определяет то, о чем мы можем мыслить. Б. Л. Ворф Специально ...
О чем поговорим <ul><li>Я расскажу об одном интересном нововведении, которое планируется сделать в  C# 5.0 </li></ul><ul><...
История развития  C# <ul><li>C# 1.0 Managed code </li></ul>TulaDev.NET
История развития  C# <ul><li>C# 1.0 Managed code </li></ul><ul><li>C# 2.0 Iterators / Generics / Anonymous </li></ul>TulaD...
История развития  C# <ul><li>C# 1.0 Managed code </li></ul><ul><li>C# 2.0 Iterators / Generics / Anonymous </li></ul><ul><...
История развития  C# <ul><li>C# 1.0 Managed code </li></ul><ul><li>C# 2.0 Iterators / Generics / Anonymous </li></ul><ul><...
История развития  C# <ul><li>C# 1.0 Managed code </li></ul><ul><li>C# 2.0 Iterators / Generics / Anonymous </li></ul><ul><...
Зачем нужна асинхронность? <ul><li>var  document = FetchDocument(url); ArchiveDocument(document); </li></ul><ul><li>FetchD...
Зачем нужна асинхронность? <ul><li>FetchDocumentAsync(url1, document => { ArchiveDocument(document); }); FetchDocumentAsyn...
Асинхронность против многопоточности <ul><li>Асинхронность позволяет производить параллельную обработку в одном потоке </l...
Где нужна асинхронность? <ul><li>В первую очередь в обработке событий пользовательского интерфейса </li></ul><ul><li>Silve...
Сопрограммы <ul><li>«Подпрограмма является частным случаем сопрограммы». Д. Кнут. </li></ul><ul><li>Пример программы, испо...
Как это выглядит в 5.0? <ul><li>Возьмем код var  document = FetchDocument(url ) ; ArchiveDocument(document); </li></ul><ul...
Как это выглядит в 5.0? <ul><li>Первая магия  C# 5.0 -  await  task Означает конструкция буквально следующее: </li></ul><u...
Как это выглядит в 5.0? <ul><li>Вторая магия  C# 5.0 –  модификатор метода   async Означает буквально следующее: </li></ul...
Как это выглядит в 5.0? <ul><li>Конструкция  await   может быть указана только внутри  async   метода </li></ul><ul><li>Ме...
Синхронный пример Document FetchDocument( string  url) { HttpRequest request = (HttpRequest) WebRequest.Create(url); var  ...
Асинхронный пример async  Task<Document> FetchDocument( string  url) { HttpRequest request = (HttpRequest) WebRequest.Crea...
Лучше один раз увидеть... Давайте рассмотрим пример в VisualStudio TulaDev.NET
Что еще нужно знать? <ul><li>Конструкция  await  применима не только для  Task .  Но и для любого выражения, для которого ...
Источник информации <ul><li>http://msdn.com/vstudio/async </li></ul><ul><li>Здесь можно скачать предварительную версию  As...
Контактная информация [email_address] ICQ: 198779172 http://www.tuladev.net/ TulaDev.NET
Upcoming SlideShare
Loading in …5
×

C# 5.0. Взгляд в будущее

5,176 views

Published on

Рассказ Сергея Шебанина о планируемых асинхронных возможностях в C# 5.0

Published in: Technology
  • Dating for everyone is here: ❤❤❤ http://bit.ly/2u6xbL5 ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2u6xbL5 ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

C# 5.0. Взгляд в будущее

  1. 1. C# 5.0 Взгляд в будущее Язык формирует наш способ мышления и определяет то, о чем мы можем мыслить. Б. Л. Ворф Специально для TulaDev.NET
  2. 2. О чем поговорим <ul><li>Я расскажу об одном интересном нововведении, которое планируется сделать в C# 5.0 </li></ul><ul><li>Объясню внутреннюю мотивацию разработчиков .NET </li></ul><ul><li>Рассмотрим примеры ситуаций, в которых полезны новые возможности </li></ul><ul><li>Разберем конкретный пример </li></ul>TulaDev.NET
  3. 3. История развития C# <ul><li>C# 1.0 Managed code </li></ul>TulaDev.NET
  4. 4. История развития C# <ul><li>C# 1.0 Managed code </li></ul><ul><li>C# 2.0 Iterators / Generics / Anonymous </li></ul>TulaDev.NET
  5. 5. История развития C# <ul><li>C# 1.0 Managed code </li></ul><ul><li>C# 2.0 Iterators / Generics / Anonymous </li></ul><ul><li>C# 3.0 LINQ / Lambda </li></ul>TulaDev.NET
  6. 6. История развития C# <ul><li>C# 1.0 Managed code </li></ul><ul><li>C# 2.0 Iterators / Generics / Anonymous </li></ul><ul><li>C# 3.0 LINQ / Lambda </li></ul><ul><li>C# 4.0 Dynamic / PLINQ </li></ul>TulaDev.NET
  7. 7. История развития C# <ul><li>C# 1.0 Managed code </li></ul><ul><li>C# 2.0 Iterators / Generics / Anonymous </li></ul><ul><li>C# 3.0 LINQ / Lambda </li></ul><ul><li>C# 4.0 Dynamic / PLINQ </li></ul><ul><li>C# 5.0 TAP (Task-based asynchronous pattern) </li></ul>TulaDev.NET
  8. 8. Зачем нужна асинхронность? <ul><li>var document = FetchDocument(url); ArchiveDocument(document); </li></ul><ul><li>FetchDocumentAsync(url, document => { ArchiveDocument(document); }); </li></ul>TulaDev.NET
  9. 9. Зачем нужна асинхронность? <ul><li>FetchDocumentAsync(url1, document => { ArchiveDocument(document); }); FetchDocumentAsync(url2, document => { ArchiveDocument(document); }); FetchDocumentAsync(url3, document => { ArchiveDocument(document); }); </li></ul><ul><li>Асинхронность позволяет рационально использовать ресурсы процессора в пределах одного потока </li></ul>TulaDev.NET
  10. 10. Асинхронность против многопоточности <ul><li>Асинхронность позволяет производить параллельную обработку в одном потоке </li></ul><ul><li>Следовательно асинхронный код не будет использовать все ядра вашего процессора </li></ul><ul><li>Но, так как поток один, то вы можете делать параллельную обработку без блокировок (lock) </li></ul>TulaDev.NET
  11. 11. Где нужна асинхронность? <ul><li>В первую очередь в обработке событий пользовательского интерфейса </li></ul><ul><li>SilverLight (JavaScript, например, — язык только с поддержкой асинхронности) </li></ul><ul><li>При программировании мультиплексоров и аналогичных им алгоритмов, использующих медленные внешние ресурсы: сеть, диски, другие накопители </li></ul>TulaDev.NET
  12. 12. Сопрограммы <ul><li>«Подпрограмма является частным случаем сопрограммы». Д. Кнут. </li></ul><ul><li>Пример программы, использующей 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 </li></ul>При первом вызове сопрограммы, выполнение начинается со стартовой точки сопрограммы. Однако при последующих вызовах выполнение продолжается с точки последнего возврата. TulaDev.NET
  13. 13. Как это выглядит в 5.0? <ul><li>Возьмем код var document = FetchDocument(url ) ; ArchiveDocument(document); </li></ul><ul><li>Его можно преобразовать в асинхронный вариант Task<document> task = FetchDocumentAsync(url); task.ContinueWith(document => { ArchiveDocument(document); }); </li></ul><ul><li>В C# 5.0 мы можем использовать другой синтаксис ArchiveDocument( await FetchDocumentAsync(url)); </li></ul>TulaDev.NET
  14. 14. Как это выглядит в 5.0? <ul><li>Первая магия C# 5.0 - await task Означает конструкция буквально следующее: </li></ul><ul><ul><li>Если таск, для которого выполняется await еще не завершен, то установить остаток текущего метода как продолжение ( continuation) таска </li></ul></ul><ul><ul><li>Затем вернуть управление вызывающему методу </li></ul></ul><ul><ul><li>Продолжение метода будет вызвано таском, когда он будет завершен </li></ul></ul>TulaDev.NET
  15. 15. Как это выглядит в 5.0? <ul><li>Вторая магия C# 5.0 – модификатор метода async Означает буквально следующее: </li></ul><ul><ul><li>Этот метод содержит конструкции await , так что компилятор должен преобразовать его таким образом, чтобы асинхронные операции могли продолжить выполнение этого метода </li></ul></ul><ul><ul><li>Метод может быть продолжен не с произвольной точки, а только с тех точек, которые запоминают конструкции await </li></ul></ul>TulaDev.NET
  16. 16. Как это выглядит в 5.0? <ul><li>Конструкция await может быть указана только внутри async метода </li></ul><ul><li>Методы async могут возвращать только void , Task или Task<T> </li></ul><ul><li>При этом void и Task методы не могут возвращать ничего внутри своей реализации. То есть содержать только return ; </li></ul><ul><li>Task<T> методы могут внутри содержать только конструкцию return <something of type T>; </li></ul>TulaDev.NET
  17. 17. Синхронный пример 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< byte >(); 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
  18. 18. Асинхронный пример async Task<Document> 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< byte >(); 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
  19. 19. Лучше один раз увидеть... Давайте рассмотрим пример в VisualStudio TulaDev.NET
  20. 20. Что еще нужно знать? <ul><li>Конструкция await применима не только для Task . Но и для любого выражения, для которого определен метод GetAwaiter() , возвращающий тип, для которого можно вызвать методы BeginAwait(Action) и EndAwait() </li></ul><ul><li>Асинхронный синтаксис сохраняет интуитивно понятный способ обработки исключений для вашего кода </li></ul><ul><li>Предварительная версия компилятора C# 5.0 пока еще совсем предварительная. То есть в ней может поменяться все, вплоть до синтаксиса </li></ul>TulaDev.NET
  21. 21. Источник информации <ul><li>http://msdn.com/vstudio/async </li></ul><ul><li>Здесь можно скачать предварительную версию Async CTP (Community Technology Preview) </li></ul><ul><li>Есть ссылки на документацию, примеры и обсуждения в блогах </li></ul><ul><li>Много видео с выступлениями дизайнеров C# 5.0 </li></ul><ul><li>http://nsentinel.blogspot.com/ </li></ul><ul><li>Можно подробно прочитать о TAP в C# 5.0 по-русски </li></ul>TulaDev.NET
  22. 22. Контактная информация [email_address] ICQ: 198779172 http://www.tuladev.net/ TulaDev.NET

×