2010-07-27 5 views
1

Мы знаем, что класс TransactionScope может использовать заданное пользователем значение таймаута. Но исключение тайм-аута выбрасывается при выходе из блока {}. Как выкинуть этот тайм-аут сразу после истечения времени ожидания?TransactionScope и Timeout Issue

ответ

2

Это невозможно.

TransactionScope просто сохраняет время начала транзакции, а затем проверяет это время при совершении транзакции.
Он не имеет возможности выбросить исключение в любой произвольной точке.

В общем, единственное исключение, которое может быть выбрано в любым Точка выполнения (управляемого кода) - ThreadAbortException.

Поэтому, если вы действительно этого захотите, вы можете создать отдельный поток, который будет спать в течение всего времени ожидания, а затем прервать исходный поток.
Однако это ужасная идея.

+0

Почему ваше решение ужасно? это выглядит так хорошо. Я реализовал и работает очень хорошо. Огромное спасибо. – mkus

+0

Отмена нитей может прерывать код в любом месте и испортить общее состояние. – SLaks

+0

http://www.interact-sw.co.uk/iangblog/2004/11/12/cancellation – SLaks