В основном я запускаю программу, которая выполняет метод, который повторяется несколько раз (например, 7 раз), но мне нужна опция, чтобы отменить ТОЛЬКО запустить один из них, но все же разрешить новым Начало.CancellationTokenSource отменил более ожидаемый
Моя проблема заключается в том, что программа заканчивается, как только я нажимаю кнопку отмены. Так что я, кажется, что-то не хватает.
Главная:
for(int i = 0; i < 7; i++)
{
cts = new CancellationTokenSource();
taskUbung = Task.Factory.StartNew(async() =>
{
await doSomething();
}, cts.Token);
}
Кнопка:
private void buttonSkipUbung_Click(object sender, RoutedEventArgs e)
{
cts.Cancel();
}
Так что, если я нажав кнопку на 3-м раунде DoSomething(), остальные 4 никогда не будет выполняться. Что мне нужно изменить для моего желаемого поведения? Я мог бы просто использовать некоторые логические значения и вернуться в doSomething(), но я решил, что это будет более чистым и более отзывчивым, если это будет так.
Я действительно не получаю ваш код. Если вы запускаете 7 асинхронных задач, они будут работать параллельно, то есть концепция всего. Таким образом, вы не можете отменить «текущий», потому что нет текущего, все они есть. – mcserep
Разве это не ожидание? Подождите, пока doSomething() не будет выполнен, прежде чем запускать его второй раз? – Rattenmann
Поскольку команда 'await' находится внутри асинхронной задачи, задача будет ждать чего-то, а не основного потока, который запустил задачу. Так что просто поставим, все 7 задач будут ждать завершения 'doSomething()' (какой код вы нам не показывали). – mcserep