Вы не заканчиваете trans1
и trans2
.
Просто поместите эти 2 строки в точку, где они заканчиваются, и все должно отображаться нормально:
trans1.End();
trans2.End();
Существует CaptureTransaction
, который является удобным методом, который может обернуть вас любым кодом и убедиться, что транзакция завершена и все исключения зафиксированы, поэтому вы используете этот метод, и он делает «все» за вас. .
Тогда есть метод StartTransaction
- это тот, который вы используете в своем коде - который запускает транзакцию и больше ничего не делает. Преимущество здесь в том, что вы получаете экземпляр ITransaction
, который вы можете использовать где угодно и когда угодно. Но в этом случае вам нужно вызвать .End()
для него вручную после выполнения транзакции (или кода, который вы хотите захватить).
То же самое с CaptureSpan
и StartSpan
.
Таким образом, вы использовали CaptureSpan
для своих диапазонов, так что те, которые заканчивались автоматически, когда лямбда с Task.Delay
заканчивалась, с другой стороны, вы начинали свои транзакции с StartTransaction
, но вызывается только .End()
в trans3
, а не в 2 других транзакциях.
Существует некоторое объяснение с демо здесь - пример кода этой демонстрации: здесь .