我只是想知道最好的方法是什么。目前我在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.
我应该以不同的方式写这个还是没关系?
答案 0 :(得分:0)
命名空间可以帮助您组织代码。
您需要以某种方式公开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
}