¿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.