Я только начал работать с задачами, и я пришел к некоторым вещам, которые я не совсем понимаю о вызовах методов в задаче. Я начал новую задачу так:Можно использовать маркер отмены при использовании метода задач внутри?
var ts = new CancellationTokenSource();
var token = ts.Token;
Task.Run(() => Control(), token);
void Control()
{
while(!token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
switch(ENUM)
{
case SOMETHING:
StartSomething();
break;
}
Task.Delay(50, token).wait();
}
}
Теперь я не понимаю поведение StartSomething()
раз лексем была отменена. Что, если StartSomething()
также содержит цикл while, могу ли я использовать его?
!token.IsCancellationRequested
и
token.ThrowIfCancellationRequested();
Как хорошо, если исключение Аннулирование выбрасывают внутри этого StartSomething()
цикла, он будет немедленно отменить задание?
В идеале вы хотите передать «токен» на все, что может занять некоторое время, возможно, «StartSomething()» и периодически проверять токен для отмены. – MickyD
Спасибо! Если задача будет отменена с помощью метода StartSomething(), это немедленно прекратит задачу или сначала вернется в цикл Control(), а затем сделает? – user2818626
@ user2818626 он выдает исключение, которое будет пузыриться через 'Control'. Пока вы его не поймаете, задача будет отменена. – i3arnon