Looking at the implementation of CancellationToken.None
, it is simply returning default(CancellationToken)
. However, I see no reference in CancellationToken
's documentation that the two are equivalent.
I'd like to offer an API like this but not until I'm sure it'll always work:
Task DoSomething(CancellationToken token = default(CancellationToken))
Is it defined behavior that default(CancellationToken)
is the same as CancellationToken.None
, or is this just an implementation detail?
default
is defined for every type. It isnull
for reference types. It is an "empty" instance for structs, i.e. one with all properties initialized to their respective default values.After filing an issue with corefx, the documentation remarks have been updated to make this a guaranteed feature:
CancellationToken.None
simply returns new CancellationToken:Thus
CancellationToken
is a struct, thendefault(CancellationToken)
will return same value. C# Spec 5.2:UPDATE: This behavior is not defined on MSDN, so you can rely only on current implementation.
They are the same. Check source code
From https://referencesource.microsoft.com/#mscorlib/system/threading/CancellationToken.cs,36b17ded8b1a228c