小编Tho*_*mas的帖子

C#任务 - 链接的取消令牌无效

如果有人可以帮助我,请 我正在尝试使用TPL链接取消令牌.问题是在取消主要CancellationTokenSource后,链接令牌的属性IsCancellationRequested的值仍为"false".

我开始做两件事,只是为了确定 - 但它应该是一样的.到第一个我通过CancellationToken,到第二个我通过CancellationTokenSource.行为是相同的:在while循环中 - 条件linkedToken.IsCancellationRequested在取消后保持"false".

这是我正在使用的代码:

public class Manager
{
    private Task tokenTask;
    private Task sourceTask;
    private CancellationTokenSource mainCancelationTokenSource;
    private CancellationToken mainToken;

    public Manager()
    {
        this.mainCancelationTokenSource = new CancellationTokenSource();
        this.mainToken = mainCancelationTokenSource.Token;
        this.mainToken.Register(MainCanceled);
    }

    public void Start()
    {
        Workers w = new Workers();
        tokenTask = Task.Run(() => w.DoWorkToken(mainToken), mainToken);
        sourceTask = Task.Run(() => w.DoWorkSource(mainCancelationTokenSource), mainCancelationTokenSource.Token);

    }
    public void Cancel()
    {
        mainCancelationTokenSource.Cancel();
    }

    private void MainCanceled()
    {
        try
        {
            tokenTask.Wait();
        }
        catch (Exception e)
        {

        }

        try
        {
            sourceTask.Wait(); …
Run Code Online (Sandbox Code Playgroud)

c# task task-parallel-library cancellationtokensource cancellation-token

2
推荐指数
1
解决办法
974
查看次数