SlideShare a Scribd company logo
1 of 29
KIEV 
MEETUP
Потоки. 
Синхронизация. 
Асинхронность. 
TPL.
Потоки 
Процесс в системе может иметь один или более 
потоков. 
Процесс может решать более одной задачи 
одновременно. 
Многозадачность на основе потоков означает 
параллельное выполнение отдельных частей 
программы.
System.Threading 
System.Threading – пространство имен для работы 
с потоками, содержит классы для управления 
потоками, такие как: 
Thread, Monitor, Interlocked
Thread 
Класс Thread, представляет собой поток. Он 
позволяет создавать новые потоки, управлять 
приоритетом потоков и получать информацию о 
всех потоках, существующих в рамках приложения.
Состояние потока
Thread 
Имя Описание 
Join() 
Блокирует вызывающий поток до завершения потока, продолжая 
обрабатывать стандартные сообщения COM и SendMessage. 
Join(Int32) 
Блокирует вызывающий поток до завершения потока или истечения 
указанного времени, продолжая обрабатывать стандартные 
сообщения COM и SendMessage. 
Join(TimeSpan) 
Блокирует вызывающий поток до завершения потока или истечения 
указанного времени, продолжая обрабатывать стандартные 
сообщения COM и SendMessage. 
Start() 
Вынуждает операционную систему изменить состояние текущего 
экземпляра на ThreadState.Running. 
Start(Object) 
Заставляет операционную систему изменить состояние текущего 
экземпляра на ThreadState.Running, а также (необязательно) 
передает объект с данными, используемыми методом в потоке.
ThreadStart 
Делегат ThreadStart представляет метод, который 
выполняется в указанном потоке Thread. 
ThreadStart не позволяет передавать данные в 
поток.
ParameterizedThreadStart 
Делегат ParameterizedThreadStart представляет 
метод, который выполняется в указанном потоке 
Thread. 
ParameterizedThreadStart позволяет передавать 
данные в поток упакованные в object.
Thread 
Имя Описание 
Abort() 
Вызывает исключение ThreadAbortException в вызвавшем его 
потоке для того, чтобы начать процесс завершения 
потока. Вызов данного метода обычно завершает поток. 
Abort(Object) 
Вызывает исключение ThreadAbortException в вызвавшем его 
потоке для того, чтобы начать процесс завершения 
потока. Вызов данного метода обычно завершает поток. 
ResetAbort Отменяет метод Abort, запрошенный для текущего потока. 
Sleep(Int32) Приостанавливает работу текущего потока на заданное время. 
Sleep(TimeSpan) Блокирует текущий поток на заданное время.
Thread 
При помощи ключевого слова lock, блок операторов можно пометить 
как критическую секцию, получив блокировку взаимного исключения 
для указанного объекта синхронизации доступа, выполнить действия с 
общим ресурсом, а затем снять блокировку. 
lock (obj) 
{ 
DoSomething(); 
} 
object tmp = obj; 
try 
{ 
Monitor.Enter(tmp); 
DoSomething(); 
} 
finally 
{ 
Monitor.Exit(tmp); 
}
Пул потоков 
Пул потоков — это коллекция потоков, которые 
могут использоваться для выполнения нескольких 
задач в фоновом режиме. Пул потоков позволяет 
разгрузить главный поток для 
асинхронного выполнения других задач .
ThreadPool 
ThreadPool - класс предоставляющий пул потоков, 
который может использоваться для выполнения 
задач, отправки рабочих элементов, обработки 
асинхронного ввода - вывода, ожидания от имени 
других потоков и обработки таймеров .
Monitor 
Класс Monitor представляет собой механизм для 
синхронизации доступа к объектам. 
Класс Monitor используется для создания 
критических секций .
WaitHandle 
Класс WaitHandle обычно используется в качестве 
базового для объектов синхронизации. 
Классы, производные от WaitHandle, определяют 
механизм сигнализации о предоставлении или 
освобождении монопольного доступа к общему 
ресурсу.
EventWaitHandle 
Класс EventWaitHandle позволяет потокам 
взаимодействовать друг с другом путем передачи 
сигналов. 
Обычно один или несколько потоков блокируются на 
EventWaitHandle до тех пор пока незаблокированные 
потоки не вызывают метод Set для освобождения 
одного или нескольких заблокированных потоков .
AutoResetEvent 
AutoResetEvent позволяет потокам 
взаимодействовать друг с другом путем передачи 
сигналов . Как правило, этот класс используется, 
когда потокам требуется исключительный доступ к 
ресурсу. 
Вызов Set сигнализирует событию AutoResetEvent 
о необходимости освобождения ожидающего 
потока.
ManualResetEvent 
ManualResetEvent позволяет потокам 
взаимодействовать друг с другом путем передачи 
сигналов. Обычно это взаимодействие касается 
задачи, которую один поток должен завершить до 
того, как другой продолжит работу. 
ManualResetEvent остается в сигнальном состоянии 
до того момента, как оно будет снова установлено 
вручную. То есть, вызовы к WaitOne немедленно 
возвращаются .
Mutex 
Mutex — примитив, который предоставляет 
эксклюзивный доступ к общему ресурсу только 
одному потоку.
Semaphore 
Класс Semaphore используется для управления 
доступом к пулу ресурсов. 
Потоки производят вход в семафор, вызывая метод 
WaitOne , унаследованный от класса WaitHandle, и 
освобождают семафор вызовом метода Release.
Асинхронное программирование 
Делегаты позволяют вызывать синхронные методы 
асинхронно. 
При вызове метода BeginInvoke() , метод сообщенный с 
делегатом помещается в пул потоков и вызывается 
асинхронно . 
В методе обратного вызова метод EndInvoke() получает 
возвращаемое значение и любые входные и выходные 
параметры или только выходные параметры.
Асинхронное программирование 
Платформа .NET Framework предоставляет два шаблона 
разработки для асинхронных операций: 
• асинхронные операции, использующие объекты 
IAsyncResult; 
• асинхронные операции, использующие события.
IAsyncResult 
С помощью интерфейса IAsyncResult, определяется 
состояние выполнения асинхронной операции. 
Класс AsyncResult инкапсулирует результаты асинхронной 
операции над делегатом. 
Делегат AsyncCallback представляет метод обратного 
вызова, который вызывается при завершении асинхронной 
операции.
Task Parallel Library 
Библиотека параллельных задач (TPL) предназначена 
для повышения производительности разработчиков за счет 
упрощения процесса добавления параллелизма в 
приложения. 
В библиотеке параллельных задач осуществляется 
секционирование работы, планирование потоков в пуле 
ThreadPool, поддержка отмены, управление состоянием и 
выполняются другие низкоуровневые задачи.
Task Parallel Library 
Библиотека параллельных задач (TPL) представляет собой 
набор открытых типов и API - интерфейсов в пространствах 
имен System.Threading и System.Threading.Tasks 
Класс Task - представляет асинхронную операцию. 
Класс Task<TResult > - представляет асинхронную 
операцию, которая может вернуть значение.
Асинхронное программирование 
Обновление UI из другого потока через 
SynchronizationContext 
var sync = SynchronizationContext.Current; 
req.BeginGetResponse( 
asyncResult=> 
{ 
var resp= (HttpWebResponse)req.EndGetResponse(asyncResult); 
sync.Post( 
delegate 
{ // ОБНОВЛЕНИЕ UI }, null); 
, null);};
Async Await 
Ключевое слово async указывает компилятору, что метод, 
является асинхронным. 
await указывает компилятору, что в этой точке необходимо 
дождаться окончания асинхронной операции 
(при этом управление возвращается вызвавшему методу).
Async Await 
Task.WhenAll() , Task.WhenAny() 
var wс1 = new WebClient(); 
var wс2 = new WebClient(); 
Task<string> task1 = 
wc1.DownloadStringTaskAsync(url1); 
Task<string> task2 = 
wc2.DownloadStringTaskAsync(url2); 
… 
string[] results = await Task.WhenAll(task1,task2);
спасибо

More Related Content

What's hot

Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Dmitry Tsitelov
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6Technopark
 
Объектно-ориентированное программирование. Лекции 15 и 16
Объектно-ориентированное программирование. Лекции 15 и 16Объектно-ориентированное программирование. Лекции 15 и 16
Объектно-ориентированное программирование. Лекции 15 и 16Dima Dzuba
 
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorFedor Lavrentyev
 
МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7Dima Dzuba
 
Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Roman Elizarov
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5Technopark
 
implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)Ruslan Shevchenko
 
Date & Time in Java SE 8
Date & Time in Java SE 8Date & Time in Java SE 8
Date & Time in Java SE 8Ilya Lapitan
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage CollectorOlexandra Dmytrenko
 
Multithreading in java past and actual
Multithreading in java past and actualMultithreading in java past and actual
Multithreading in java past and actualYevgen Levik
 
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)Roman Elizarov
 
Лекция 6
Лекция 6Лекция 6
Лекция 6itc73
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.Igor Shkulipa
 
JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)Mikhail Davydov
 

What's hot (20)

Lab5
Lab5Lab5
Lab5
 
Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)
 
Reactive extensions
Reactive extensionsReactive extensions
Reactive extensions
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6
 
Объектно-ориентированное программирование. Лекции 15 и 16
Объектно-ориентированное программирование. Лекции 15 и 16Объектно-ориентированное программирование. Лекции 15 и 16
Объектно-ориентированное программирование. Лекции 15 и 16
 
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
 
Thread
ThreadThread
Thread
 
МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7
 
Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5
 
implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)
 
Date & Time in Java SE 8
Date & Time in Java SE 8Date & Time in Java SE 8
Date & Time in Java SE 8
 
9 free rtos
9 free rtos9 free rtos
9 free rtos
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
 
Java 8. Thread pools
Java 8. Thread poolsJava 8. Thread pools
Java 8. Thread pools
 
Multithreading in java past and actual
Multithreading in java past and actualMultithreading in java past and actual
Multithreading in java past and actual
 
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
Теоретический минимум для понимания Java Memory Model (для JPoint 2014)
 
Лекция 6
Лекция 6Лекция 6
Лекция 6
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
 
JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)
 

Similar to Svitla .Net meetup in Kiev, Anzhiiak Oleksii

8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threadsMERA_school
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиDotNetConf
 
Android - 11 - Multithreading
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - MultithreadingNoveo
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Anton Moiseenko
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILRoman Brovko
 
Высокоуровневая обработка событий
Высокоуровневая обработка событий Высокоуровневая обработка событий
Высокоуровневая обработка событий Bonart
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3Technopark
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAlexey Fyodorov
 
Wild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scoutsWild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scoutsHYS Enterprise
 
Java осень 2013 лекция 2
Java осень 2013 лекция 2Java осень 2013 лекция 2
Java осень 2013 лекция 2Technopark
 
Живые приложения с Rx
Живые приложения с RxЖивые приложения с Rx
Живые приложения с RxGoSharp
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 

Similar to Svitla .Net meetup in Kiev, Anzhiiak Oleksii (20)

Working with .NET Threads
Working with .NET ThreadsWorking with .NET Threads
Working with .NET Threads
 
Step 7
Step 7Step 7
Step 7
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threads
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметки
 
Threads in java
Threads in javaThreads in java
Threads in java
 
Android - 11 - Multithreading
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - Multithreading
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GIL
 
Stream API
Stream APIStream API
Stream API
 
Высокоуровневая обработка событий
Высокоуровневая обработка событий Высокоуровневая обработка событий
Высокоуровневая обработка событий
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithms
 
Wild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scoutsWild Async .NET world: AID Kit for boy-scouts
Wild Async .NET world: AID Kit for boy-scouts
 
Java осень 2013 лекция 2
Java осень 2013 лекция 2Java осень 2013 лекция 2
Java осень 2013 лекция 2
 
Java threads - part 3
Java threads - part 3Java threads - part 3
Java threads - part 3
 
Живые приложения с Rx
Живые приложения с RxЖивые приложения с Rx
Живые приложения с Rx
 
Async
AsyncAsync
Async
 
Luxoft async.net
Luxoft async.netLuxoft async.net
Luxoft async.net
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 

Svitla .Net meetup in Kiev, Anzhiiak Oleksii

  • 3. Потоки Процесс в системе может иметь один или более потоков. Процесс может решать более одной задачи одновременно. Многозадачность на основе потоков означает параллельное выполнение отдельных частей программы.
  • 4. System.Threading System.Threading – пространство имен для работы с потоками, содержит классы для управления потоками, такие как: Thread, Monitor, Interlocked
  • 5. Thread Класс Thread, представляет собой поток. Он позволяет создавать новые потоки, управлять приоритетом потоков и получать информацию о всех потоках, существующих в рамках приложения.
  • 7. Thread Имя Описание Join() Блокирует вызывающий поток до завершения потока, продолжая обрабатывать стандартные сообщения COM и SendMessage. Join(Int32) Блокирует вызывающий поток до завершения потока или истечения указанного времени, продолжая обрабатывать стандартные сообщения COM и SendMessage. Join(TimeSpan) Блокирует вызывающий поток до завершения потока или истечения указанного времени, продолжая обрабатывать стандартные сообщения COM и SendMessage. Start() Вынуждает операционную систему изменить состояние текущего экземпляра на ThreadState.Running. Start(Object) Заставляет операционную систему изменить состояние текущего экземпляра на ThreadState.Running, а также (необязательно) передает объект с данными, используемыми методом в потоке.
  • 8. ThreadStart Делегат ThreadStart представляет метод, который выполняется в указанном потоке Thread. ThreadStart не позволяет передавать данные в поток.
  • 9. ParameterizedThreadStart Делегат ParameterizedThreadStart представляет метод, который выполняется в указанном потоке Thread. ParameterizedThreadStart позволяет передавать данные в поток упакованные в object.
  • 10. Thread Имя Описание Abort() Вызывает исключение ThreadAbortException в вызвавшем его потоке для того, чтобы начать процесс завершения потока. Вызов данного метода обычно завершает поток. Abort(Object) Вызывает исключение ThreadAbortException в вызвавшем его потоке для того, чтобы начать процесс завершения потока. Вызов данного метода обычно завершает поток. ResetAbort Отменяет метод Abort, запрошенный для текущего потока. Sleep(Int32) Приостанавливает работу текущего потока на заданное время. Sleep(TimeSpan) Блокирует текущий поток на заданное время.
  • 11. Thread При помощи ключевого слова lock, блок операторов можно пометить как критическую секцию, получив блокировку взаимного исключения для указанного объекта синхронизации доступа, выполнить действия с общим ресурсом, а затем снять блокировку. lock (obj) { DoSomething(); } object tmp = obj; try { Monitor.Enter(tmp); DoSomething(); } finally { Monitor.Exit(tmp); }
  • 12. Пул потоков Пул потоков — это коллекция потоков, которые могут использоваться для выполнения нескольких задач в фоновом режиме. Пул потоков позволяет разгрузить главный поток для асинхронного выполнения других задач .
  • 13. ThreadPool ThreadPool - класс предоставляющий пул потоков, который может использоваться для выполнения задач, отправки рабочих элементов, обработки асинхронного ввода - вывода, ожидания от имени других потоков и обработки таймеров .
  • 14. Monitor Класс Monitor представляет собой механизм для синхронизации доступа к объектам. Класс Monitor используется для создания критических секций .
  • 15. WaitHandle Класс WaitHandle обычно используется в качестве базового для объектов синхронизации. Классы, производные от WaitHandle, определяют механизм сигнализации о предоставлении или освобождении монопольного доступа к общему ресурсу.
  • 16. EventWaitHandle Класс EventWaitHandle позволяет потокам взаимодействовать друг с другом путем передачи сигналов. Обычно один или несколько потоков блокируются на EventWaitHandle до тех пор пока незаблокированные потоки не вызывают метод Set для освобождения одного или нескольких заблокированных потоков .
  • 17. AutoResetEvent AutoResetEvent позволяет потокам взаимодействовать друг с другом путем передачи сигналов . Как правило, этот класс используется, когда потокам требуется исключительный доступ к ресурсу. Вызов Set сигнализирует событию AutoResetEvent о необходимости освобождения ожидающего потока.
  • 18. ManualResetEvent ManualResetEvent позволяет потокам взаимодействовать друг с другом путем передачи сигналов. Обычно это взаимодействие касается задачи, которую один поток должен завершить до того, как другой продолжит работу. ManualResetEvent остается в сигнальном состоянии до того момента, как оно будет снова установлено вручную. То есть, вызовы к WaitOne немедленно возвращаются .
  • 19. Mutex Mutex — примитив, который предоставляет эксклюзивный доступ к общему ресурсу только одному потоку.
  • 20. Semaphore Класс Semaphore используется для управления доступом к пулу ресурсов. Потоки производят вход в семафор, вызывая метод WaitOne , унаследованный от класса WaitHandle, и освобождают семафор вызовом метода Release.
  • 21. Асинхронное программирование Делегаты позволяют вызывать синхронные методы асинхронно. При вызове метода BeginInvoke() , метод сообщенный с делегатом помещается в пул потоков и вызывается асинхронно . В методе обратного вызова метод EndInvoke() получает возвращаемое значение и любые входные и выходные параметры или только выходные параметры.
  • 22. Асинхронное программирование Платформа .NET Framework предоставляет два шаблона разработки для асинхронных операций: • асинхронные операции, использующие объекты IAsyncResult; • асинхронные операции, использующие события.
  • 23. IAsyncResult С помощью интерфейса IAsyncResult, определяется состояние выполнения асинхронной операции. Класс AsyncResult инкапсулирует результаты асинхронной операции над делегатом. Делегат AsyncCallback представляет метод обратного вызова, который вызывается при завершении асинхронной операции.
  • 24. Task Parallel Library Библиотека параллельных задач (TPL) предназначена для повышения производительности разработчиков за счет упрощения процесса добавления параллелизма в приложения. В библиотеке параллельных задач осуществляется секционирование работы, планирование потоков в пуле ThreadPool, поддержка отмены, управление состоянием и выполняются другие низкоуровневые задачи.
  • 25. Task Parallel Library Библиотека параллельных задач (TPL) представляет собой набор открытых типов и API - интерфейсов в пространствах имен System.Threading и System.Threading.Tasks Класс Task - представляет асинхронную операцию. Класс Task<TResult > - представляет асинхронную операцию, которая может вернуть значение.
  • 26. Асинхронное программирование Обновление UI из другого потока через SynchronizationContext var sync = SynchronizationContext.Current; req.BeginGetResponse( asyncResult=> { var resp= (HttpWebResponse)req.EndGetResponse(asyncResult); sync.Post( delegate { // ОБНОВЛЕНИЕ UI }, null); , null);};
  • 27. Async Await Ключевое слово async указывает компилятору, что метод, является асинхронным. await указывает компилятору, что в этой точке необходимо дождаться окончания асинхронной операции (при этом управление возвращается вызвавшему методу).
  • 28. Async Await Task.WhenAll() , Task.WhenAny() var wс1 = new WebClient(); var wс2 = new WebClient(); Task<string> task1 = wc1.DownloadStringTaskAsync(url1); Task<string> task2 = wc2.DownloadStringTaskAsync(url2); … string[] results = await Task.WhenAll(task1,task2);