Этот тип ситуации обрабатывается обещанием с выполнено . Согласно документу:
Обещание: вернуть объект Promise, чтобы наблюдать, когда все действия определенного типа, связанные с коллекцией, поставленные в очередь или нет, завершены.
Готово: добавить обработчики, которые будут вызываться при разрешении отложенного объекта.
blockquote>.animate('Your-Selectot') .promise() .done(function () { $(this).css('backgroud-color', 'blue'); // Its only sample to describe situation. });
done
обратный вызов вызывается после того, как коллекция очистит свои очереди.
Похоже на ловлю исключения в Insert3 (), таким образом, код продолжается после вызова. Если Вы захотите, чтобы это откатывало, то необходимо будет позволить пузырю исключения до блока попытки/выгоды в основной стандартной программе так, чтобы ts. Завершенный () оператор никогда не называют.
Я также столкнулся с подобной проблемой. Моя проблема произошла, потому что SqlConnection, который я использовал в своем SqlCommands, был уже открыт, прежде чем TransactionScope был создан, таким образом, это никогда не включалось в список в TransactionScope как транзакция.
Действительно ли возможно, что класс SqlHelper снова использует экземпляр SqlConnection, который открыт перед вводом блока TransactionScope?
Неявный откат только произойдет, если из использования выйдут, не звоня ts.complete. Поскольку Вы обрабатываете исключение в Insert3 (), исключение никогда не заставляет оператор использования выходить.
Или повторно бросьте исключение или уведомьте вызывающую сторону, что откат необходим (делайте изменение подписью Insert3 () к bool Insert3 ()?)
(на основе отредактированной версии, которая не глотает исключения),
Сколько времени операции берут? Если какой-либо из них очень долго работает, возможно, что Транзакция, Обязательная функция ошибки укусила Вас - т.е. соединение, стала отдельной. Попытайтесь добавить Transaction Binding=Explicit Unbind
к строке подключения.