停止上一个任务并运行新任务wpf

时间:2019-02-01 11:52:01

标签: c# wpf asynchronous async-await task

我想如果用户更改了列表框项目而上一个任务尚未完成,则该任务停止并开始一个新任务。我该怎么办?
我使用了这段代码,但是没有用。

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 :(得分:0)

  1. 您应该将CancellationToken传递给任务中运行的代码,并不时从令牌上调用令牌上的ThrowIfCancellationRequested方法。
  2. 您应该在委托之后将取消令牌传递给Task.Run方法。由于取消是通过抛出OperationCanceledExceptionTaskCanceledException来完成的,因此任务的状态将变得有缺陷,因为其中已引发异常。传递令牌时,任务会将其与取消异常中的令牌进行比较,如果它们匹配,则任务将被取消,而不是错误。