查看CancellationToken.None
的实施情况,它只是返回default(CancellationToken)
。但是,我在CancellationToken
的文档中没有提到这两者是等价的。
我想提供这样的API,但直到我确定它会一直有效:
Task DoSomething(CancellationToken token = default(CancellationToken))
是否定义了default(CancellationToken)
与CancellationToken.None
相同的行为,或者这只是一个实现细节?
答案 0 :(得分:28)
使用corefx filing an issue之后,documentation备注已更新,以使其成为有保证的功能:
您还可以使用C#
default(CancellationToken)
语句创建空取消令牌。
答案 1 :(得分:16)
他们是一样的。检查源代码
public static CancellationToken None
{
get { return default(CancellationToken); }
}
答案 2 :(得分:6)
CancellationToken.None
只返回新的CancellationToken:
public static CancellationToken None
{
get
{
return new CancellationToken();
}
}
因此CancellationToken
是一个结构,然后default(CancellationToken)
将返回相同的值。 C#Spec 5.2:
对于value-type的变量,默认值与 value-type的默认构造函数
计算的值
更新:此行为未在MSDN上定义,因此您只能依赖当前实现。
答案 3 :(得分:1)
default
。参考类型为null
。它是结构的“空”实例,即将所有属性初始化为各自默认值的实例。