正在取消在其他命名空间中运行的任务
本文关键字:运行 任务 命名空间 取消 其他 | 更新日期: 2023-09-27 18:27:01
我只是想知道什么是最好的方法。目前,我已经在GUI命名空间中声明了CancellationTokenSource
,这样我就可以在按下按钮时调用它。
namespace Namespace1
{
public class Number1
{
CancellationTokenSource cancelToken = new CancellationTokenSource();
....
然后我编写了一个构造函数,它接受CancellationTokenSource
参数并将其分配给本地声明的字段,然后我在方法中使用该字段。
namespace Namespace2
{
public class Number2
{
CancellationTokenSource cancelToken;
public testing(CancellationTokenSource cancelToken)
{
this.cancelToken = cancelToken;
}
... default constructor and method(s) follow.
我应该用不同的方式写这篇文章吗?还是可以?
命名空间可以帮助您组织代码。
您需要以某种方式公开您的CancellationTokenSource
变量。不能只让一个变量在类定义之外浮动。
我建议您使用属性。例如,您可以从类的实例中将CancellationTokenSource
公开为公共属性,以便其他类(即使它们在其他命名空间中)也可以访问它。避免使用公共变量。
namespace ConsoleApplication1
{
namespace SomeOtherSpace
{
public class TokenWrapper
{
public CancellationToken CancelToken { get; set; }
}
}
namespace YetAnotherSpace
{
public class AnotherClass
{
private readonly CancellationToken _Token;
public AnotherClass(CancellationToken token)
{
_Token = token;
}
}
}
class Program
{
static void Main(string[] args)
{
SomeOtherSpace.TokenWrapper wrapper = new SomeOtherSpace.TokenWrapper();
wrapper.CancelToken = new CancellationToken();
YetAnotherSpace.AnotherClass anotherClass = new YetAnotherSpace.AnotherClass(wrapper.CancelToken);
}
}
}
编辑
作为对您评论的回应,一个更好的想法是让您可以创建一个CancellationTokenSource
,然后将CancellationToken
传递给需要订阅它的类。它几乎适合我能想到的所有场景。
static void Main(string[] args)
{
CancellationTokenSource sourceToken = new CancellationTokenSource();
Task.Factory.StartNew(() => { MyTask(sourceToken.Token); });
}
static void MyTask(CancellationToken token)
{
//do stuff
}