En lugar de realizar la limpieza en el mismo subproceso (o iniciar un subproceso y bloquear hasta que finalice) inicie la limpieza en un "fondo" (IsBackground = falso, para que no termine prematuramente) y vuelva inmediatamente.¿No es una buena idea escribir el método Dispose/Close para que sea asincrónico?
¿Cuándo es esta una mala idea y qué tan mala? ¿Alguna vez esta es una buena idea?
¿Es esto un pensamiento abstracto o tienes un recurso real no administrado que está tomando mucho tiempo para derribar (si es así, qué es, estoy intrigado)? – Lazarus
Más de un pensamiento abstracto. Estaba mirando algunos objetos IO identificables y pensé: "Deberías intentar hacer todo IO de forma asíncrona porque Dios sabe cuánto tardará. Espera, ¿esto también se aplica a los destructores? De ser así, ¿por qué no hacerlos asíncronos por defecto (al usar bloques)? –
Estoy bastante seguro de que el GC se ejecuta en un subproceso dedicado por lo que es, en efecto, concurrente, es decir, el objeto está marcado para la recopilación y su aplicación continúa ejecutándose. Eso es cierto para el perfil del cliente al menos, creo que el perfil del servidor puede tener el bloqueo del GC. – Lazarus