Rastrea las instancias de WebDriver muertas durante una tarea paralela

Estoy viendo algunas rarezas de instancias muertas ejecutando pruebas de esfuerzo web paralizadas de bucles anidados utilizando Selenium WebDriver, un ejemplo simple que, por ejemplo, alcanza 300 páginas únicas con 100 impresiones cada una.

Estoy "exitosamente" obteniendo 4 - 8 instancias de WebDriver usando unThreadLocal<FirefoxWebDriver> para aislarlos por subproceso de tarea, y MaxDegreeOfParallelism en una instancia de ParallelOptions para limitar los subprocesos. Estoy particionando y paralelizando solo el bucle externo (la colección de páginas), y revisando.IsValueCreated sobre elThreadLocal<> contenedor dentro del principio del método de "tarea de ejecución larga" de cada partición. Para facilitar la limpieza posterior, agrego cada nueva instancia a un ConcurrentDictionary con clave por ID de hilo.

Independientemente de la estrategia de paralelización o partición que use, las instancias de WebDriver ocasionalmente realizarán una de las siguientes acciones:

Lanzar pero nunca mostrar una URL o ejecutar una impresiónEjecute, ejecute cualquier número de impresiones bien, luego simplemente permanezca inactivo en algún momento

Cuando cualquiera de estos suceda, el bucle paralelofinalmente parece notar que un hilo no está haciendo nada, y genera una nueva partición. Sin es el número de hilos permitidos, esto resulta en tenern hilos productivos solo alrededor del 50-60% del tiempo.

La limpieza todavía funciona bien al final; Puede haber 2n navegadores abiertos o más, pero los que son productivos e improductivos se limpian por igual.

¿Hay una manera de monitorear estas inútiles instancias de WebDriver y a) eliminarlas de inmediato, más b) obtener el bucle paralelo para reemplazar el segmento de la tarea de inmediato, en lugar de quedarse atrás durante varios minutos como suele hacerlo ahora?

Respuestas a la pregunta(2)

Su respuesta a la pregunta