Здравствуйте, RushDevion, Вы писали:
S>>Упд: Т.е. если мы у отмененной задачи отловили исключение TaskCanceledException, то это стату этой задачи все равно будет Canceled? И поэтому ожидание, в том числе whеnall, у такой задачи всегда бросает (ну это пример теста выше)?
RD>Во-первых, нет такой вещи как "отмененный поток".
Ну оговорился, отмененная задача, вестимо.
RD>Поток — это просто механизм исполнения таски.
Благодарю, хорошая формулировка
. А то на собесах любят спросить про отличия, я и растекался мыслью про более высокоуровневую абстракцию.
RD>Если в ходе исполнения возникает exception, он перехватывается и сохраняется в таске.
RD>При этом последняя переходит в Faulted или Cancelled state в зависимости от типа exception'а.
RD>Далее, пусть кто-то в другом потоке говорит таске Wait/await.
RD>Если таска была в Faulted state, она перевыбросит сохраненный Exception (обернутый в AggregateException т.к. в общем случае таска может
RD>представлять более одной операции) на вызывающем потоке.
RD>Если таска была в Cancelled state, на выбросит TaskCancelledException на вызывающем потоке.
RD>Если вызывающих потоков несколько и каждый делает Wait/await — exception будет выкинут для каждого из них.
RD>Поэтому бесполезно пытаться проглотить exception, перехватывая его на одном потоке, а потом делая таске Wait/await на другом.
Вот этого я не знал, я думал что перехватив соотв. исключение, бросившая задача помечается как Completed, ну т.е. больше бросать не будет.