首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CancellationTokenSource,什么时候处理?

CancellationTokenSource,什么时候处理?
EN

Stack Overflow用户
提问于 2013-08-26 20:14:13
回答 1查看 9.1K关注 0票数 9

我应该在什么时候处理CancellationTokenSource?例如,如果我创建一个按钮,并在每次单击按钮时将其放入线程中:

代码语言:javascript
复制
    private void Button_Click(object sender, EventArgs e)
    {
        if (clicked == false)
        {

            clicked = true;
            CTSSend = new CancellationTokenSource();
            Thread1 = new Thread(() => Method1(CTSSend.Token)); 
            Thread1.Start();
            Thread2 = new Thread(() => Method2(CTSSend.Token)); 
            Thread2.Start();
        }
        else
        {
            CTSSend.Cancel();
            CTSSend.Dispose();
            clicked = false;
        }
    }

我应该像那样处理掉它吗?原因如果是这样的话,它会有点问题,因为我需要把它放在处理器中,它将在应用程序关闭时处理,因为不能保证如果我没有仔细等待它,它就不会被处理掉,这将导致ObjectDisposedException。

我甚至尝试用它来防止异常(因为我不想使用Try Catch,在这种情况下,我甚至不想在第一个地方得到错误)。

代码语言:javascript
复制
        if (CTSSend != null)
        {
            CTSSend.Cancel();
            CTSSend.Dispose();
        }
        if (CTSReceive != null)
        {
            CTSReceive.Cancel();
            CTSReceive.Dispose();
        }

但是,也许我应该只在最后处理它,而不是每次取消后都处理它?虽然我不喜欢这样不断地向一个新的对象添加资源。

你们这些人是怎么处理这些案子的?

编辑:

一个更具体的问题,可以解决它(在我的例子中)。

如何将布尔值绑定到CancellationToken?所以我可以有像CTS.IsDisposed这样的东西;

有些对象有这个功能,但是CTS没有,如果它有的话,它会解决我现在遇到的问题。我目前正在单独使用bool,这不是我喜欢的东西。

EN

回答 1

Stack Overflow用户

发布于 2013-08-26 20:22:45

他们在这里做了一些分析,When to dispose CancellationTokenSource?,似乎试图正确地处理它是非常无用的。让GC收集它(如果你查看几乎所有的MSDN示例,它都不会被处理)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18443813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档