¿Cuál es el efecto de AsyncLocal <T> en código no asíncrono / en espera?

Estoy trabajando en una base de código muy grande y antigua de una aplicación winform de escritorio. En esta base de código hay muchas operaciones realizadas en subprocesos en segundo plano, principalmente utilizandoBackgroundWorker.

Un patrón común en esta base de código es ocultar la complejidad al vincular los artefactos al hilo que se está ejecutando. Por ejemplo, la conexión y la transacción de la base de datos se almacenan en[ThreadStatic] campos.

Estoy tratando de cambiar esto y empiezo a usarasync/await código y aproveche la ejecución de la tarea en cualquier subproceso del grupo y permita que una tarea continúe ejecutándose en cualquier otro subproceso medianteConfigureAwait(false). Yo sé eso[ThreadStatic] no juega bien conasync/await, y he leído varias respuestas aquí sugiriendo usarAsyncLocal<T> en lugar.

Dado que estoy trabajando en una base de código grande, como se mencionó anteriormente, no puedo cambiar aasync/await en todas partes de una sola vez, y debo hacer que esto cambie gradualmente. Entonces el código que antes tenía[ThreadStatic] cambiará aAsyncLocal<T>, pero grandes porciones del código continuarán usandoBackgroundWorker y no golpeará ni un soloasync/await línea de código

Pregunta
esto funcionara? Necesito poder definir algún tipo de flujo de contexto que funcione con mi nuevoasync/await código, y también sigo trabajando con mi antiguo código no asíncrono que dependía de[ThreadStatic] manteniendo cada tema independiente del uno al otro.

Si estoy totalmente equivocado y voy por el camino equivocado, las sugerencias son muy bienvenidas.

Respuestas a la pregunta(1)

Su respuesta a la pregunta