我试图提供两个方法之一称为StartTask(action mymethod) 和另一个称为StopTask()的功能;取消没有提供任务方法的任务与CancellationTokenSource
问题是操作必须有权访问CancellationTokenSource以检查取消并退出方法(返回),这实际上并不是我想要的方法可能在另一个组件或层中,我无法推送每个方法访问该取消资源,
我不能推动具有处理方法的组件的设计者/开发人员检查取消和返回。
有没有什么办法可以有这样的事情,我知道这听起来很奇怪,不适用,只是想问问。
这是我得到的最好:
CancellationTokenSource cancellationTokenSource;
private void button1_Click(object sender, EventArgs e)
{
cancellationTokenSource = new CancellationTokenSource();
Task t = new Task(() => Dowork(CancellationAction), cancellationTokenSource.Token, TaskCreationOptions.LongRunning);
t.Start();
}
private bool CancellationAction()
{
if (cancellationTokenSource.IsCancellationRequested)
{
label1.Invoke(new MethodInvoker(() =>
{
label1.Text = "Cancellation Requested!";
}));
return true;
}
return false;
}
private void Dowork(Func<bool> Return)
{
int x = 1;
while (true)
{
x++;
label1.Invoke(new MethodInvoker(() =>
{
label1.Text = x.ToString();
}));
Thread.Sleep(1000);
if (Return())
{
return;
}
}
}
问题,这是现在的DoWork必须有一个参数是FUNC,但如果该方法已经采取其他的参数是什么?创建任务将在另一个类中,可能不知道在旁边传递哪些参数取消操作
由于'CancellationTokenSource'暗示的名称,它意味着'CancellationToken'的* Source *,获得了我访问'Token'属性的权限。通常,模式是将'CancellationToken'传递给依赖任务。这就是说,我无法弄清楚你最终的代码示例是要达到什么目的。 – 2011-06-01 13:32:29