Como descartar TransactionScope em async / wait cancelável?

Estou tentando usar o novo recurso async / await para trabalhar de forma assíncrona com um banco de dados. Como algumas das solicitações podem ser demoradas, quero poder cancelá-las. A questão que estou correndo é queTransactionScope aparentemente tem uma afinidade de thread, e parece que ao cancelar a tarefa, suaDispose() é executado em um segmento errado.

Especificamente, ao chamar.TestTx() Eu recebo o seguinteAggregateException contendoInvalidOperationException emtask.Wait ():

"A TransactionScope must be disposed on the same thread that it was created."

Aqui está o código:

public void TestTx () {
    var cancellation = new CancellationTokenSource ();
    var task = TestTxAsync ( cancellation.Token );
    cancellation.Cancel ();
    task.Wait ();
}

private async Task TestTxAsync ( CancellationToken cancellationToken ) {
    using ( var scope = new TransactionScope () ) {
        using ( var connection = new SqlConnection ( m_ConnectionString ) ) {
            await connection.OpenAsync ( cancellationToken );
            //using ( var command = new SqlCommand ( ... , connection ) ) {
            //  await command.ExecuteReaderAsync ();
            //  ...
            //}
        }
    }
}

ATUALIZADO: a parte comentada é mostrar que há algo a ser feito - de forma assíncrona - com a conexão, uma vez aberta, mas esse código não é necessário para reproduzir o problema.

questionAnswers(4)

yourAnswerToTheQuestion