que estaba leyendo acerca de las nuevas clases de colección concurrentes en .NET 4 en James Michael Hare's blog y el page talking about ConcurrentQueue<T>
dice:¿Por qué ConcurrentQueue <T>. Count return 0 cuando IsEmpty == true?
Todavía se recomienda, sin embargo, que para los controles vacíos se llama IsEmpty en lugar de comparar cuenta a cero .
soy curioso - si hay una razón para utilizar IsEmpty en lugar de comparar Conde a 0, ¿por qué la clase no comprueba internamente IsEmpty y volver 0 antes de realizar cualquiera de los trabajos costosos para contar?
ej .:
public int Count
{
get
{
// Check IsEmpty so we can bail out quicker
if (this.IsEmpty)
return 0;
// Rest of "expensive" counting code
}
}
Parece extraño sugerir esto si pudiera ser "fijo" tan fácilmente sin efectos secundarios?
No entiendo lo que quiere decir con "si obtiene el valor de Conteo y lo compara, está en su hilo". ¿Cómo es eso diferente de llamar a IsEmpty? Eso también está en ese hilo. –
Esto es exactamente lo mismo con Count. Si leo Count y devuelve 0, también podría modificarse antes de mi próxima operación. Esto no explica por qué Count internamente no pudo verificar IsEmpty y devolver 0 para evitar este "gotcha". –
O viceversa, esa llamada a IsEmpty en la clase de cola (que está documentada de que Count es O (1)) podría simplemente usar un conteo Count == 0. –