Qual é o efeito do AsyncLocal <T> no código não assíncrono / de espera?

Estou trabalhando em uma base de código muito grande e antiga de um aplicativo winform para desktop. Nesta base de código, há muitas operações executadas em threads em segundo plano, principalmente usandoBackgroundWorker.

Um padrão comum nessa base de código é ocultar a complexidade vinculando artefatos ao encadeamento que está sendo executado. Por exemplo, a conexão e a transação do banco de dados são armazenadas em[ThreadStatic] Campos.

Estou tentando mudar isso e começar a usarasync/await código e se beneficie da execução da tarefa em qualquer encadeamento do pool e permitindo que uma tarefa continue executando em qualquer outro encadeamento usandoConfigureAwait(false). Eu sei disso[ThreadStatic] não joga bem comasync/await, e eu li várias respostas aqui sugerindo usarAsyncLocal<T> em vez de.

Como estou trabalhando em uma grande base de código, como mencionado anteriormente, não consigo mudar paraasync/await em todos os lugares em um único tiro, e devo fazer isso muda gradualmente. Então o código que antes tinha[ThreadStatic] mudará paraAsyncLocal<T>, mas grandes partes do código continuarão usandoBackgroundWorker e não vai bater um únicoasync/await linha de código.

Pergunta, questão
Isso vai funcionar? Preciso definir algum tipo de fluxo de contexto que funcione com meu novoasync/await e também continuo trabalhando com meu antigo código não assíncrono, que contava com[ThreadStatic] mantendo todos os itens de thread independentes um do outro.

Se eu estiver totalmente errado e seguir o caminho errado, sugestões são muito bem-vindas.

questionAnswers(1)

yourAnswerToTheQuestion