run executereaderasync cancellationtoken cancel .net linq ado.net cancellation-token

.net - executereaderasync - ¿El valor predeterminado(CancelaciónToken) es equivalente a CancelaciónTenizada? ¿Ninguno?



cancellationtokensource (4)

En cuanto a la implementación de CancellationToken.None , simplemente está devolviendo el default(CancellationToken) . Sin embargo, no veo ninguna referencia en la documentación de CancellationToken que los dos sean equivalentes.

Me gustaría ofrecer una API como esta, pero no hasta que esté seguro de que siempre funcionará:

Task DoSomething(CancellationToken token = default(CancellationToken))

¿Es el comportamiento definido que el default(CancellationToken) es el mismo que el de CancellationToken.None default(CancellationToken) o es solo un detalle de la implementación?


Después de presentar un problema con corefx, las observaciones de la documentation se han actualizado para que esta sea una característica garantizada:

También puede usar la declaración default(CancellationToken) C # default(CancellationToken) para crear un token de cancelación vacío.



CancellationToken.None simplemente devuelve una nueva CancelaciónToken:

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

Por lo tanto, CancellationToken es una estructura, luego el default(CancellationToken) devolverá el mismo valor. C # Spec 5.2:

Para una variable de un tipo de valor, el valor predeterminado es el mismo que el valor calculado por el constructor predeterminado del tipo de valor

ACTUALIZACIÓN: este comportamiento no está definido en MSDN, por lo que solo puede confiar en la implementación actual.


default se define para cada tipo. Es null para los tipos de referencia. Es una instancia "vacía" para estructuras, es decir, una con todas las propiedades inicializadas a sus respectivos valores predeterminados.