This question already has answers here:
When to dispose CancellationTokenSource?
(7个答案)
7年前关闭。
我什么时候应该处置CancellationTokenSource?
例如,如果我每次点击一个按钮,将其放入“线程”中:
我应该这样处理吗?
如果是这样的话,那会有点麻烦,因为我需要将其放入处置器中,该处置器会在应用程序关闭时进行处置,因为如果我不小心等待它,则无法保证不会将其处置,这将导致ObjectDisposedException。
我什至尝试使用此方法来防止异常(因为我不想使用Try Catch,在这种情况下,我甚至不想首先得到错误)。
但是好吧,也许我应该只在最后处置它,并且不要在每次取消后都处置它?
尽管我不喜欢这样如何继续向新对象添加资源。
你们如何处理这些案件?
编辑:
一个可以解决它的更具体的问题(以我为例)。
我如何将 bool 绑定(bind)到CancellationToken?
这样我就可以拥有CTS.IsDisposed之类的东西;
有些对象具有该功能,但是CTS不会,如果有的话,它将解决我遇到的问题。
我目前正在单独使用 bool ,这不是我更喜欢的东西。
(7个答案)
7年前关闭。
我什么时候应该处置CancellationTokenSource?
例如,如果我每次点击一个按钮,将其放入“线程”中:
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,在这种情况下,我甚至不想首先得到错误)。
if (CTSSend != null)
{
CTSSend.Cancel();
CTSSend.Dispose();
}
if (CTSReceive != null)
{
CTSReceive.Cancel();
CTSReceive.Dispose();
}
但是好吧,也许我应该只在最后处置它,并且不要在每次取消后都处置它?
尽管我不喜欢这样如何继续向新对象添加资源。
你们如何处理这些案件?
编辑:
一个可以解决它的更具体的问题(以我为例)。
我如何将 bool 绑定(bind)到CancellationToken?
这样我就可以拥有CTS.IsDisposed之类的东西;
有些对象具有该功能,但是CTS不会,如果有的话,它将解决我遇到的问题。
我目前正在单独使用 bool ,这不是我更喜欢的东西。
最佳答案
他们在When to dispose CancellationTokenSource?处进行了一些分析,似乎没有必要尝试正确处理它。让GC收集它(如果您查看几乎所有的MSDN示例,它都不会被丢弃)
关于c# - CancellationTokenSource,何时处置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18443813/
10-13 08:54