Остановить предыдущую задачу и запустить новую задачу wpf - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу, чтобы, если пользователь изменил элемент списка и предыдущая задача еще не была выполнена, эта задача останавливается и запускается новая задача.Как я могу это сделать?
Я использовал этот код, но не работал.

CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token;
private void Listbox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (task != null && (task.IsCompleted == false || task.Status == TaskStatus.Running))
    {
        if (source != null)
            source.Cancel();
    }

    task = LoadArts();
}

private async Task LoadArts()
{
    token = source.Token;
    await Task.Run(() =>
    {
    }

    , token);
}

1 Ответ

0 голосов
/ 05 февраля 2019
  1. Вы должны передать CancellationToken коду, выполняемому в задаче, и периодически вызывать метод ThrowIfCancellationRequested для токена из него.
  2. Вы должныпередайте маркер отмены методу Task.Run после вашего делегата.Поскольку отмена выполняется путем выдачи OperationCanceledException или TaskCanceledException, статус задачи станет ошибочным, поскольку в нем было сгенерировано исключение.Когда вы передаете токен, задача сравнивает его с токеном в исключении отмены, и если они совпадают, задача отменяется, а не сбрасывается.
...