.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.
Ellos son lo mismo. Verifique el código fuente
public static CancellationToken None
{
get { return default(CancellationToken); }
}
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.