TAP Flashcards

1
Q

Неявное создание и запуск задач

A

Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork());

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Равно ли количество созданных экземпляров методом Invoke количеству переданных делегатов

A

Число экземпляров Task, созданных Invoke в фоновом режиме, не обязательно равно числу предоставленных делегатов. Библиотека параллельных задач может применять различные оптимизации, особенно с большим количеством делегатов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

В каком случае предпочтительно использовать методы Run()

A

Методы Run — предпочтительный способ создания и запуска задач, если не требуется более жесткий контроль над созданием и планированием задачи.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

В каком случае предпочтительно использовать Task.Factory.StartNew()

A

Используйте этот метод, если нет необходимости разделять создание и планирование и требуются дополнительные параметры создания задач или использование определенного планировщика, а также при необходимости передачи дополнительного состояния задаче через ее свойство AsyncState

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

К каким переменными имеется доступ при использовании лямбда выражений для создания делегата

A

При использовании лямбда-выражения для создания делегата имеется доступ ко всем переменным, видимым на этом этапе в исходном коде

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Какие проблемы могут возникнут с захватом переменных в циклах

A

В некоторых случаях, особенно в циклах, лямбда-выражение не перехватывает переменную, как можно было бы ожидать. Оно только перехватывает окончательное значение, а не значение, изменяющееся после каждой итерации.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Как решить проблему с захватом переменных в циклах

A

Доступ к значению для каждой итерации можно получить, предоставив объект состояния задаче через ее конструктор.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Каким образом из объекта задачи можно получить доступ к объекту состояния

A

Состояние передается в качестве аргумента делегату задачи, и доступ к нему можно получить из объекта задачи с помощью свойства Task.AsyncState.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Каким образом можно указать планировщику задач способ планирования задачи в пуле потоков

A

API, в которых создаются задачи, предоставляют перегрузки, принимающие параметр TaskCreationOptions. Указывая один из этих параметров, пользователь задает планировщику задач способ планирования задачи в пуле потоков.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Как указать задачу, которую нужно выполнять по завершению предыдущей

A

С помощью методов Task.ContinueWith и Task.ContinueWith можно указать задачу, которую нужно запускать по завершении предшествующей задачи.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Как избежать создания нескольких экземпляров задач - продолжения для каждой предшествующей задачи

A

Поскольку метод Task.ContinueWith является экземплярным, вызовы этого метода можно объединять в цепочку, а не создавать экземпляр объекта Task для каждой предшествующей задачи.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Создание отсоединенных дочерних задач и их особенность

A

Если в пользовательском коде, выполняемом в некоторой задаче, создается новая задача и не задается параметр AttachedToParent, новая задача не синхронизируется с родительской никаким особым способом.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Создание присоединенной дочерней задачи

A

Если пользовательский код, который выполняется в задаче, создает новую задачу с параметром AttachedToParent, эта новая задача считается присоединенной дочерней задачей родительской задачи.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Каковы основные причины ожидания задач

A

Как правило, ожидание задачи выполняется по одной из следующих причин.

* Основной поток зависит от конечного результата, вычисленного задачей.
* Необходимо обрабатывать исключения, которые могут быть созданы из задачи.
* Приложение может завершиться до окончания выполнения всех задач. Например, выполнение консольных приложений завершается после выполнения всего синхронного кода в Main (точке входа приложения).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Какие экземплярные и статические методы позволяют ожидать завершения задач

A

WhenAll, WhenAny, Delay и FromResult

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Как отменить ожидание/выполнение

A

Можно создать токен и выдать запрос отмены позднее с помощью класса CancellationTokenSource.

17
Q

В каких случаях полезен метод WhenAny

A

Метод WhenAny особенно полезен в следующих ситуациях.

* Избыточные операции. Рассмотрим алгоритм или операцию, которые можно выполнить несколькими способами. Метод WhenAny можно использовать для выбора операции, завершающейся первой, и последующей отмены оставшихся операций.
* Операции с чередованием. Можно запустить несколько операций, которые все должны завершиться, и использовать метод WhenAny для обработки результатов при завершении каждой операции. После завершения одной операции можно запустить одну или несколько дополнительных задач.
* Регулируемые операции. Метод WhenAny можно использовать для расширения предыдущего сценария путем ограничения количества одновременно выполняемых операций.
* Операции с истекшим сроком действия. Метод WhenAny можно использовать, чтобы сделать выбор между одной или несколькими задачами и задачей, завершающейся после определенного времени, например задачей, возвращаемой методом Delay.
18
Q

Какие основные методы представляет TaskFactory для создания, запуска задач и задач продолжения

A

StartNew, ContinueWhenAny, ContinueWhenAll, FromAsync

19
Q

Какие состояния возможны у задач

A
Canceled
	6
Created
	0
Faulted
	7
RanToCompletion
	5
Running
	3
WaitingForActivation
	1
WaitingForChildrenToComplete
	4
WaitingToRun
	2
20
Q

Задача продолжения

A

это асинхронная задача, вызываемая другой задачей, которая называется предшествующей, при завершении этой предшествующей задачи

21
Q

Что можно выполнить с помощью продолжений

A
  • Передавать данные из предшествующей задачи в продолжение.
  • Указывать точные условия, при которых продолжение будет вызываться или не будет вызываться.
  • Отменять продолжение перед его запуском либо совместно с его выполнением.
  • Определять подсказки, как должно планироваться продолжение.
  • Вызывать несколько продолжений из одной и той же предшествующей задачи.
  • Вызывать одно продолжение по завершении всех или одной из нескольких предшествующих задач.
  • Прикреплять продолжения одно после другого до любой произвольной длины.
  • Использовать продолжение для обработки исключений, вызванных предшествующей задачей.
22
Q

В каком состоянии создается задача-продолжение

A

Продолжение — это задача, созданная в состоянии WaitingForActivation

23
Q

Что будет если вызвать Task.Start в продолжении в пользовательском коде

A

вызывает исключение System.InvalidOperationException

24
Q

Создание продолжения для одной предшествующей задачи

A

Task taskA = Task.Run( () => …)

Task continuation = taskA.ContinueWith(antecedent =>…)

25
Если предшествующие задачи завершаются успешно - какой их статус?
свойство Task.Status имеет значение TaskStatus.RanToCompletion
26
Какие методы позволяют создавать продолжения
Статические: - Task.WhenAll - Task.WhenAny Экземплярные: - TaskFactory.ContinueWhenAll - TaskFactory.ContinueWhenAny
27
Как задаются параметры продолжения
можно использовать перегрузку ContinueWith, принимающую значение перечисления System.Threading.Tasks.TaskContinuationOptions
28
Как Task.ContinueWith передает ссылку на предшествующую задачу
В виде аргумента в пользовательский делегат продолжения
29
В каком случае можно получить в продолжении доступ к св-ву Task.Result предшествующей задачи
Если предшествующая задача является объектом System.Threading.Tasks.Task и эта задача выполнялась до своего завершения
30
В каком случае попытка доступа к св-ву Result вызовет исключение AggregateException
если задача была отменена или произошел сбой
31
Как заставить продолжение выполняться только когда предшествующая задача выполнилась успешно
используя в .ContinueWith параметр TaskContinuationOptions.OnlyOnRanToCompletion
32
В каких случаях свойство Task.Status продолжения устанавливается в значение TaskStatus.Canceled
- В ответ на запрос отмены вызывается исключение OperationCanceledException . Как и в любой другой задаче, если исключение содержит тот же токен, что и переданный в продолжение, то он рассматривается как подтверждение совместной отмены. - Продолжение передает объект System.Threading.CancellationToken, свойство IsCancellationRequested которого имеет значение true. В этом случае продолжение не запускается и переходит в состояние TaskStatus.Canceled. - Продолжение никогда не запускается, поскольку условие, заданное его аргументом TaskContinuationOptions , не выполнено. Например, если предшествующая задача переходит в состояние TaskStatus.Faulted, ее продолжение, которое передало параметр TaskContinuationOptions.NotOnFaulted, не будет выполняться, но перейдет в состояние Canceled.
33
Конкурентность (concurrency)
общий термин, который говорит, что одновременно выполняется более одной задачи
34
Параллельное исполнение (parallel computing)
подразумевает наличие более одного вычислительного устройства (например, процессора), которые будут одновременновыполнять несколько задач
35
Многопоточность
один из способов реализации конкурентного исполнения путем выделения абстракции "рабочего потока" (worker thread).
36
Асинхронность (asynchrony)
подразумевает, что операция может быть выполнена кем-то на стороне: удаленным веб-узлом, сервером или другим устройством за пределами текущего вычислительного устройства.
37
CPU-bound и IO-Bound операции
CPU-Bound операции нагружают вычислительные мощности текущего устройства, а IO-Bound позволяют выполнить задачу вне текущей железки.