小编Bla*_*lau的帖子

任务取消和TaskContinuationOptions

我昨天刚刚介绍了Tasks(TPL),所以我尝试做一些示例项目,以便了解如何使用它们.

我的示例项目设置了一个开始按钮,开始递增进度条.第二个按钮取消任务.一个文本框用于报告何时调用使用TaskContinuationOptions.OnlyOnRanToCompletion的延续,以及一个文本框,用于报告何时调用使用TaskContinuationOptions.OnlyOnCanceled的继续.

我可以创建并执行一个Task,但是以一种让TaskContinuationOptions.OnlyOnCanceled标志继续触发的方式取消它是一个问题.

我创建如下任务:

private void StartTask()
{
    CancellationTokenSource tokenSource = new CancellationTokenSource();
    CancellationToken token = tokenSource.Token;

    Task task = null;
    task = Task.Factory.StartNew(() => DoWork(tokenSource), tokenSource.Token);

    //A list<CancellationTokenSource> so that I can cancel the task when clicking a button on the UI Thread.
    MyTasks.Add(tokenSource);

    Task completed = task.ContinueWith(result => TaskCompleted(), TaskContinuationOptions.OnlyOnRanToCompletion);
    Task canceled = task.ContinueWith(result => TaskCanceled(), TaskContinuationOptions.OnlyOnCanceled);
}
Run Code Online (Sandbox Code Playgroud)

我取消了以下任务:

private void CancelTasks()
{
    foreach (CancellationTokenSource tokenSource in MyTasks)
    {
        tokenSource.Cancel();                
    }
}
Run Code Online (Sandbox Code Playgroud)

我的工作人员功能如下:

private void DoWork(CancellationTokenSource tokenSource)
{ …
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library

4
推荐指数
1
解决办法
7253
查看次数

标签 统计

c# ×1

task-parallel-library ×1