- •1. Сборщик мусора и управление ресурсами
- •2. Жизненный цикл объектов
- •3. Неуправляемый код и указатели
- •4. Строки и строковый пул
- •5. Обобщенные типы, ограничения в параметрах обобщенных типов, типы допускающие null значение
- •6. Тип Type и пространство System.Reflection
- •7. Создание объектов с помощью рефлексии, вызов методов объектов средствами рефлексии
- •8. Атрибуты, жизненный цикл объекта атрибута
- •9. Специальные атрибуты net.Framework и ограничения пользовательских атрибутов
- •10. Метаданные сборок, структура сборок, домены приложений
- •11. Многопоточное программирование. Виды многопоточности, обеспечение многопоточности в net.Framework, виды блокировки
- •12. Класс Thread, логические и физические потоки выполнения, жизненный цикл потока выполнения
- •13. Класс монитора, конструкция lock()
- •14. Атомарная синхронизация и класс Interlocked
- •15. Класс ReaderWriterLock, пул потоков
- •16. Классы WaitHandle и производные от него: ManualResetEvent, AutoResetEvent, Mutex
- •17. Высокоуровневые средства распараллеливания задач, класс Task
- •18. Свойства и методы класса Task
- •19. Делегаты, цепочка вызова
- •Групповая адресация
- •20. Асинхронный вызов с помощью объекта делегата
- •IAsyncResult
- •21. События, обратный вызов, типовая схема реализации события
- •22. Лямбда-выражения, замыкание лямбда-выражений
- •23. Деревья выражений, типы деревьев. Создание деревьев выражений
- •24. Технология ado.Net, архитектура, модель с постоянным соединением и с рассоединением
- •Linq to DataSet
- •Linq to sql
- •Платформа ado.Net Entity Framework
- •Службы wcf Data Services
- •25)Понятие поставщика данных и его составные части в ado.Net. Класс соединения, итератора, команды.
- •26. Технология объектно-реляционного связывания, персистентные объекты, на примере одной из технологии (Linq to sql, Linq to Entities, nHibernate)
- •Entity Framework
- •27. Linq to Objects: архитектура технологии и возможности, понятие итератора, создание Linq запросов
- •28. Средства распараллеливания выполнения запросов plinq.
- •29. Основы wcf. Основные понятия, применение. Контракты данных, привязки. Архитектура сервис-ориентированных систем.
- •1) Библиотека с интерфейсом
- •2) Сервер – консольное приложение
- •3) Клиент – консольное приложение
- •30. Структура проекта с использованием wcf сервисов. Интерфейсы сервиса, атрибуты для обозначения методов сервиса и контрактов данных.
- •1) Библиотека с интерфейсом
- •2) Сервер – консольное приложение
- •3) Клиент – консольное приложение
- •31. Методы и свойства прокси-объекта на стороне клиента.
- •32. Развертывание wcf сервисов.
17. Высокоуровневые средства распараллеливания задач, класс Task
В эпоху многоядерных машин, которые позволяют параллельно выполнять сразу несколько процессов, стандартных средств работы с потоками в .NET уже оказалось недостаточно. Поэтому одним из новшеств платформы .NET 4.0 стала библиотека параллельных задач TPL (Task Parallel Library).
Библиотека параллельных задач (TPL) представляет собой набор открытых типов и API-интерфейсов в пространствах имен System.Threading и System.Threading.Tasks. Цель TPL — повышение производительности труда разработчиков за счет упрощения процедуры добавления параллелизма в приложения. TPL динамически масштабирует степень параллелизма для наиболее эффективного использования всех доступных процессоров. Кроме того, в библиотеке параллельных задач осуществляется секционирование работы, планирование потоков в пуле ThreadPool, поддержка отмены, управление состоянием и выполняются другие низкоуровневые задачи. Используя библиотеку параллельных задач, можно повысить производительность кода, сосредоточившись на работе, для которой предназначена программа.
Task - класс
Экземпляры Task могут быть созданы различными способами. Наиболее распространенный подход с помощью свойства Factory задачи для извлечения экземпляра TaskFactory, который можно использовать для создания задачи для нескольких целей. Например, для создания задачи Task, выполняющей действие, можно использовать метод StartNew свойства Factory:
var t = Task.Factory.StartNew(() => DoAction());
t.Start();
Более полные примеры содержатся в разделе Параллелизм задач (библиотека параллельных задач).
Класс Task также предоставляет конструкторы, которые инициализируют задачу, но не планируют ее выполнение. Для повышения производительности метод StartNew свойства Factory должен быть предпочитаемым механизмом для создания и планирования вычислительных задач, но для сценариев, где необходимо разделять создание и планирование, могут использоваться конструкторы, а метод Start задачи может затем использоваться для планирования задачи, которая будет выполнена позднее.
Для операций, которые возвращают значения, следует использовать класс Task<TResult>.
Task<TResult> - класс
Представляет асинхронную операцию, которая может вернуть значение.
var t = Task<int>.Factory.StartNew(() => GenerateResult());
int result = t.Result;
СВОЙСТА И МЕТОДЫ КЛАССА TASK В ВОПРОСЕ №18
18. Свойства и методы класса 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 данной задачи. |
Методы
Имя |
Описание |
ContinueWith(Action<Task>) |
Создает продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи Task. |
Delay(Int32) |
Создает задачу, которая будет завершена после некоторой временной задержки. |
Dispose() |
Освобождает все ресурсы, используемые текущим экземпляром класса Task. |
FromResult<TResult> |
Создает Task<TResult>, которая завершается удачно с указанным результатом. |
Run(Action) |
Помещает переданную задачу для выполнения в очередь ThreadPool и возвращает дескриптор этой задачи. |
Run(Func<Task>) |
Ставит в очередь заданную работу для запуска в ThreadPool и возвращает прокси для задачи, возвращаемой функцией function. |
RunSynchronously() |
Синхронно выполняет задачу Task в текущем планировщике TaskScheduler. |
Start() |
Запускает задачу Task, планируя ее выполнение в текущем планировщике TaskScheduler. |
Wait() |
Ожидает завершения выполнения объекта Task. |
WaitAll(Task[]) |
Ожидает завершения выполнения всех указанных объектов Task. |
WaitAny(Task[]) |
Ожидает завершения выполнения любого из указанных объектов Task. |
WhenAll(IEnumerable<Task>) |
Создает задачу, которая будет выполнена после выполнения всех предоставленных задач. |
