默认(CancellationToken)是否等同于CancellationToken.None?

时间:2013-10-23 13:53:00

标签: .net linq ado.net cancellation-token

查看CancellationToken.None的实施情况,它只是返回default(CancellationToken)。但是,我在CancellationToken的文档中没有提到这两者是等价的。

我想提供这样的API,但直到我确定它会一直有效:

Task DoSomething(CancellationToken token = default(CancellationToken))

是否定义了default(CancellationToken)CancellationToken.None相同的行为,或者这只是一个实现细节?

4 个答案:

答案 0 :(得分:28)

使用corefx filing an issue之后,documentation备注已更新,以使其成为有保证的功能:

  

您还可以使用C#default(CancellationToken)语句创建空取消令牌。

答案 1 :(得分:16)

他们是一样的。检查源代码

public static CancellationToken None
{
    get { return default(CancellationToken); }
}

来自https://referencesource.microsoft.com/#mscorlib/system/threading/CancellationToken.cs,36b17ded8b1a228c

答案 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。它是结构的“空”实例,即将所有属性初始化为各自默认值的实例。