SlideShare a Scribd company logo
1 of 18
Download to read offline
Темы лекции: Асинхронное программирование в C#.
Практическое задание: Асинхронное программирование в C#.
Тренер: Игорь Шкулипа, к.т.н.
Платформа .Net и язык программирования C#.
Занятие 16
http://www.slideshare.net/IgorShkulipa 2
Асинхронное программирование
Асинхронное программирование — это набор методик для
реализации дорогостоящих операций, которые выполняются
параллельно с остальной частью программы. Одна из областей, где
часто применяется асинхронное программирование, — программы с
графическим UI: как правило, замораживать UI до завершения
дорогостоящей операции неприемлемо. Кроме того, асинхронные
операции важны для серверных приложений, которым нужно
параллельно обрабатывать множество клиентских запросов.
К типичным примерам асинхронных операций, часто наблюдаемым на
практике, относятся отправка запроса на сервер и ожидание ответа,
чтение данных с жесткого диска и выполнение ресурсоемких
вычислений вроде проверки правописания.
http://www.slideshare.net/IgorShkulipa 3
Библиотека параллельных задач
Библиотека параллельных задач (TPL), как и предполагает ее имя, основывается
на концепции задачи. Термин параллелизм задач означает одновременное
выполнение одной или нескольких разных задач. Задача представляет собой
асинхронную операцию и в некотором роде напоминает создание нового потока
или рабочего элемента ThreadPool, но на более высоком уровне абстракции.
Задачи предоставляют два основных преимущества.
• Более эффективное и масштабируемое использование системных ресурсов.
В фоновом режиме задачи помещаются в очередь ThreadPool,
усовершенствованный с помощью алгоритмов, которые определяют и
настраивают количество потоков, повышающих производительность. Это
делает задачи относительно простыми и позволяет создавать множество задач
для использования точного параллелизма. В дополнение к этому для
обеспечения балансировки нагрузки используются широко известные
алгоритмы переноса нагрузки.
• Больший программный контроль по сравнению с потоком или рабочим
элементом.
Задачи и построение платформы на их основе предоставляют богатый набор
интерфейсов API, которые поддерживают ожидание, отмену, продолжения,
надежную обработку исключений, подробные состояния, пользовательское
планирование и многое другое.
http://www.slideshare.net/IgorShkulipa 4
Тип Action<T>
public delegate void Action<in T>(T obj)
• T - тип параметра метода, инкапсулируемого данным делегатом.
Этот параметр типа является контрвариантным. Это означает, что
можно использовать либо указанный тип, либо менее производный
тип.
• obj - тип: T, Параметр метода, инкапсулируемого данным делегатом.
Делегат Action<T> можно использовать для передачи метода в качестве
параметра без явного объявления пользовательского делегата.
Инкапсулируемый метод должен соответствовать заданной этим
делегатом сигнатуре метода. Это означает, что инкапсулированный метод
должен иметь один параметр, передаваемый по значению, и не должен
возвращать значение.
http://www.slideshare.net/IgorShkulipa 5
Класс Task
using System.Threading.Tasks
[HostProtectionAttribute(SecurityAction.LinkDemand,
Synchronization = true,
ExternalThreading = true)]
public class Task : IAsyncResult, IDisposable
Представляет асинхронную операцию.
Task(Action) Инициализирует новую задачу Task с заданным действием.
Task(Action,
CancellationToken)
Инициализирует новую задачу Task с заданными действием и токеном
CancellationToken.
Task(Action,
TaskCreationOptions)
Инициализирует новую задачу Task с заданными действием и
параметрами создания.
Task(Action<Object>, Object)
Инициализирует новую задачу Task с заданными действием и
состоянием.
Task(Action, CancellationToken,
TaskCreationOptions)
Инициализирует новую задачу Task с заданными действием и
параметрами создания.
Task(Action<Object>, Object,
CancellationToken)
Инициализирует новую задачу Task с заданными действием, состоянием
и параметрами.
Task(Action<Object>, Object,
TaskCreationOptions)
Инициализирует новую задачу Task с заданными действием, состоянием
и параметрами.
Task(Action<Object>, Object,
CancellationToken,
TaskCreationOptions)
Инициализирует новую задачу Task с заданными действием, состоянием
и параметрами.
http://www.slideshare.net/IgorShkulipa 6
Task. Свойства
AsyncState
Возвращает объект состояния, предоставленный при создании
задачи Task, или значение NULL, если объект не предоставлен.
CreationOptions
Возвращает объект TaskCreationOptions, использованный при
создании данной задачи.
CurrentId
Возвращает уникальный идентификатор выполняющейся в
настоящее время задачи Task.
Exception
Возвращает объект AggregateException, который привел к
преждевременному завершению задачи Task. Если Task
завершенные успешно или пока не бросало исключений, это
значение null.
Factory
Предоставляет доступ к методам фабрики для создания
экземпляров Task и Task<TResult>.
Id
Возвращает уникальный идентификатор данного экземпляра
Task.
IsCanceled
Возвращает значение, указывающее, завершилось ли
выполнение данного экземпляра Task из-за отмены.
IsCompleted
Возвращает значение, которое показывает, завершилась ли
задача Task.
IsFaulted
Возвращает значение, указывающее, завершилась ли задача
Task из-за необработанного исключения.
Status Возвращает состояние TaskStatus данной задачи.
http://www.slideshare.net/IgorShkulipa 7
Task. Методы
http://msdn.microsoft.com/ru-ru/library/system.threading.tasks.task.aspx
http://www.slideshare.net/IgorShkulipa 8
Класс Parallel
Предоставляет поддержку параллельных циклов и областей.
[HostProtectionAttribute(SecurityAction.LinkDemand,
Synchronization = true,
ExternalThreading = true)]
public static class Parallel;
Методы:
• For + 10 перегрузок – выполняет цикл for с заданными аргументами
• ForEach + 19 перегрузок – выполняет цикл foreach с заданными
аргументами
• Invoke - выполняет все предоставленные действия, в том числе
параллельно.
http://www.slideshare.net/IgorShkulipa 9
Пример Task
Action<object> action = (object obj) =>
{
Console.WriteLine("Task={0}, Object={1}, Thread={2}",
Task.CurrentId, obj.ToString(),
Thread.CurrentThread.ManagedThreadId);
};
Task t1 = new Task(action, "StringObject1");
Task t2 = Task.Factory.StartNew(action, "StringObject2");
t2.Wait();
t1.Start();
t1.Wait();
Task t3 = new Task(action, "StringObject3");
t3.RunSynchronously();
t3.Wait();
Task=1, Object=StringObject2, Thread=11
Task=2, Object=StringObject1, Thread=11
Task=3, Object=StringObject3, Thread=10
http://www.slideshare.net/IgorShkulipa 10
Пример. Вычисление 10000 факториалов.
Последовательная версия.
using System.Numerics;
class Program
{
static void Main(string[] args)
{
BigInteger FactorialsCount = 2000;
var Results = new Dictionary<BigInteger, BigInteger>();
Func<BigInteger, BigInteger> factorial = null;
factorial = (n) => (n == 0) ? 1 : n * factorial(n - 1);
for (BigInteger i = 0; i < FactorialsCount; i++)
{
Results.Add(i, factorial(i));
}
foreach (var item in Results)
{
Console.WriteLine("N={0}, Factorial={1}",
item.Key, item.Value);
}
Console.ReadKey();
}
}
http://www.slideshare.net/IgorShkulipa 11
Пример. Вычисление 10000 факториалов.
Parallel версия.
using System.Numerics;
using System.Collections.Concurrent;
class Program
{
static void Main(string[] args)
{
int FactorialsCount = 10000;
var Results =
new ConcurrentDictionary<BigInteger, BigInteger>(4, FactorialsCount);
Func<int, BigInteger> factorial = null;
factorial = (n) =>
(n == 0) ? 1 : n * factorial(n - 1);
Parallel.For(0, FactorialsCount,
(i) =>
{
Results[i] = factorial(i);
});
foreach (var item in Results)
{
Console.WriteLine("N={0}, Factorial={1}",
item.Key, item.Value);
}
Console.ReadKey();
}
}
http://www.slideshare.net/IgorShkulipa 12
Пример. Вычисление 10000 факториалов.
4-Parallel версия.
using System.Numerics;
using System.Collections.Concurrent;
class Program
{
static void Main(string[] args)
{
int FactorialsCount = 10000;
var Results =
new ConcurrentDictionary<BigInteger, BigInteger>(4, FactorialsCount);
Func<int, BigInteger> factorial = null;
factorial = (n) =>
(n == 0) ? 1 : n * factorial(n - 1);
for (int j = 0; j < 4; j++)
{
Parallel.For(j * 2500, (j + 1) * 2500,
(i) =>
{
Results[i] = factorial(i);
});
}
foreach (var item in Results)
{
Console.WriteLine("N={0}, Factorial={1}",
item.Key, item.Value);
}
Console.ReadKey();
}
}
http://www.slideshare.net/IgorShkulipa 13
Ключевое слово async
Модификатор async указывает, что модифицируемые им метод, лямбда-
выражение, или анонимный метод являются асинхронными.
Асинронный метод может возвращать значение следующих типов: Task,
Task<TResult> или void. Асинхронный метод не может принимать в
качестве своих аргументов параметры с модификаторами ref или out,
но, при этом, он может вызывать методы, имеющие такие параметры.
Указывайте Task<TResult> в качестве типа значения, возвращаемого
асинхронным методом, в том случае, если оператор return этого
метода возвращает операнд типа TResult. Если же асинхронный метод
при своём завершении не возвращает имеющего смысл значения,
используйте тип Task.
http://www.slideshare.net/IgorShkulipa 14
Оператор await
Оператор await применяется к задаче в асинхронных методах, для того,
чтобы приостановить выполнение метода до тех пор, пока задача не
завершится. Задача представляет собой выполняющихся работы.
Асинхронный метод, в котором используется await должен быть помечен
модификатором async. Такой метод, определенный с помощью
модификатора async, и обычно содержащий один или несколько
выражений await, называется асинхронным методом.
http://www.slideshare.net/IgorShkulipa 15
Пример async и await
public class AsyncClassExample
{
public async Task<string> AsyncExample()
{
await Task.Delay(5000);
return "Async Method Finished";
}
}
class Program
{
static void Main(string[] args)
{
AsyncClassExample ace = new AsyncClassExample();
Task<string> t1 = ace.AsyncExample();
string result = t1.Result;
Console.WriteLine(result);
Console.ReadKey();
}
}
Async Method Finished
http://www.slideshare.net/IgorShkulipa 16
Пример. Вычисление факториала 1000
public class AsyncFactorialClass {
public async Task<BigInteger> Factorial(BigInteger n) {
BigInteger result=0;
if (n == 0) return 1;
else
{
Task<BigInteger> t = Factorial(n - 1);
await t;
result = t.Result*n;
}
return result;
}
}
class Program {
static void Main(string[] args) {
AsyncFactorialClass ace = new AsyncFactorialClass();
Task<BigInteger> t1 = ace.Factorial(1000);
BigInteger result = t1.Result;
Console.WriteLine(result);
Console.ReadKey();
}
}
http://www.slideshare.net/IgorShkulipa 17
Факториал 1000
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208
48696940480047998861019719605863166687299480855890132382966994459099742450408707375991
88236277271887325197795059509952761208749754624970436014182780946464962910563938874378
86487337119181045825783647849977012476632889835955735432513185323958463075557409114262
41747434934755342864657661166779739666882029120737914385371958824980812686783837455973
17461360853795345242215865932019280908782973084313928444032812315586110369768013573042
16168747609675871348312025478589320767169132448426236131412508780208000261683151027341
82797770478463586817016436502415369139828126481021309276124489635992870511496497541990
93422215668325720808213331861168115536158365469840467089756029009505376164758477284218
89679646244945160765353408198901385442487984959953319101723355556602139450399736280750
13783761530712776192684903435262520001588853514733161170210396817592151090778801939317
81141945452572238655414610628921879602238389714760885062768629671466746975629112340824
39208160153780889893964518263243671616762179168909779911903754031274622289988005195444
41428201218736174599264295658174662830295557029902432415318161721046583203678690611726
01587835207515162842255402651704833042261439742869330616908979684825901254583271682264
58066526769958652682272807075781391858178889652208164348344825993266043367660176999612
83186078838615027946595513115655203609398818061213855860030143569452722420634463179746
05946825731037900840244324384656572450144028218852524709351906209290231364932734975655
13958720559654228749774011413346962715422845862377387538230483865688976461927383814900
14076731044664025989949022222176590433990188601856652648506179970235619389701786004081
18897299183110211712298459016419210688843871218556461249607987229085192968193723886426
14839657382291123125024186649353143970137428531926649875337218940694281434118520158014
12334482801505139969429015348307764456909907315243327828826986460278986432113908350621
70950025973898635542771967428222487575867657523442202075736305694988250879689281627538
48863396909959826280956121450994871701244516461260379029309120889086942028510640182154
39945715680594187274899809425474217358240106367740459574178516082923013535808184009699
63725242305608559037006242712434169090041536901059339838357779394109700277534720000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
http://www.slideshare.net/IgorShkulipa 18
Лабораторная работа №16. Асинхронное
программирование в C#
В индивидуальных курсовых проектах при необходимости использовать
асинхронное программирование с помощью классов Task или Parallel, а
так же асинхронные методы с модификатором async и оператором
await.

More Related Content

What's hot

операторы и выражения
операторы и выраженияоператоры и выражения
операторы и выраженияLidiKashka
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»Unguryan Vitaliy
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФПAlexander Granin
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5Technopark
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.Igor Shkulipa
 
Всё ли ты знаешь о JavaScript ООП?
Всё ли ты знаешь о JavaScript ООП?Всё ли ты знаешь о JavaScript ООП?
Всё ли ты знаешь о JavaScript ООП?Vitaly Hornik
 
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМAlexandr Konfidentsialno
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняAlexander Granin
 
Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Alexandr Konfidentsialno
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.Igor Shkulipa
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
 
Subprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLSubprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLvitaliykulanov
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9Technopark
 
Structural project description in VHDL
Structural project description in VHDLStructural project description in VHDL
Structural project description in VHDLvitaliykulanov
 
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...vitaliykulanov
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
 

What's hot (20)

операторы и выражения
операторы и выраженияоператоры и выражения
операторы и выражения
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.
 
Всё ли ты знаешь о JavaScript ООП?
Всё ли ты знаешь о JavaScript ООП?Всё ли ты знаешь о JavaScript ООП?
Всё ли ты знаешь о JavaScript ООП?
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
 
Subprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLSubprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDL
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
 
Structural project description in VHDL
Structural project description in VHDLStructural project description in VHDL
Structural project description in VHDL
 
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программирование
 

Viewers also liked

C# Desktop. Занятие 07.
C# Desktop. Занятие 07.C# Desktop. Занятие 07.
C# Desktop. Занятие 07.Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++Amar Kushwaha
 
InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015Lech Wilczynski
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.Igor Shkulipa
 
Production diary 4
Production diary 4Production diary 4
Production diary 4Laila Jaleel
 
Fotos de la tesis
Fotos de la tesisFotos de la tesis
Fotos de la tesisIda Morán
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
Production diary 8
Production diary 8Production diary 8
Production diary 8Laila Jaleel
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled PresentationKamilla Paiva
 
Production diary 17
Production diary 17Production diary 17
Production diary 17Laila Jaleel
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
amazing animals
amazing animalsamazing animals
amazing animalssosome
 
EE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile TooEE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile Toobentgate
 

Viewers also liked (20)

C# Desktop. Занятие 07.
C# Desktop. Занятие 07.C# Desktop. Занятие 07.
C# Desktop. Занятие 07.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
Amarnath_Kushwaha_SWEngg_3yrs_exp_C_C++
 
InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.
 
Production diary 4
Production diary 4Production diary 4
Production diary 4
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
Fotos de la tesis
Fotos de la tesisFotos de la tesis
Fotos de la tesis
 
Catalog AdPro
Catalog AdProCatalog AdPro
Catalog AdPro
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
What is Lean UX?
What is Lean UX?What is Lean UX?
What is Lean UX?
 
Production diary 8
Production diary 8Production diary 8
Production diary 8
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
 
Production diary 17
Production diary 17Production diary 17
Production diary 17
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
amazing animals
amazing animalsamazing animals
amazing animals
 
EE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile TooEE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile Too
 

Similar to C# Desktop. Занятие 16.

язык програмирования
язык програмированияязык програмирования
язык програмированияOlegmingalev1997
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийngrebnev
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
 
вспомогательные алгоритмы
вспомогательные алгоритмывспомогательные алгоритмы
вспомогательные алгоритмыЕлена Ключева
 
вспомогательные алгоритмы
вспомогательные алгоритмывспомогательные алгоритмы
вспомогательные алгоритмыЕлена Ключева
 
C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.Igor Shkulipa
 
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
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETGoSharp
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...Ontico
 
Статический анализ кода в DDD
Статический анализ кода в DDDСтатический анализ кода в DDD
Статический анализ кода в DDDAleksei Alekseev
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Ontico
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 

Similar to C# Desktop. Занятие 16. (20)

Async
AsyncAsync
Async
 
Luxoft async.net
Luxoft async.netLuxoft async.net
Luxoft async.net
 
язык програмирования
язык програмированияязык програмирования
язык програмирования
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложений
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
 
вспомогательные алгоритмы
вспомогательные алгоритмывспомогательные алгоритмы
вспомогательные алгоритмы
 
вспомогательные алгоритмы
вспомогательные алгоритмывспомогательные алгоритмы
вспомогательные алгоритмы
 
C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.
 
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
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
 
Статический анализ кода в DDD
Статический анализ кода в DDDСтатический анализ кода в DDD
Статический анализ кода в DDD
 
Tdd php
Tdd phpTdd php
Tdd php
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)
 
C#5 What's new?
C#5 What's new?C#5 What's new?
C#5 What's new?
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 

More from Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 

More from Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 

C# Desktop. Занятие 16.