Нет, вы не можете (с пользой) сделать это.
Хотя ответ Дрю Марша верен (что существуют средства для того, чтобы сделать транзакцию межпотоковой), это вам не поможет.ObjectContext
не является потокобезопасным - вам не следует обращаться к нему из других потоков, и вы должны определенно не обновлять его в других потоках;у вас будет неопределенное поведение: вы, вероятно, столкнетесь с повреждением данных, которое (если вам повезет) приведет к сбоям.
Если вам нужен многопоточный доступ ObjectContext
, вам нужно вручную сериализовать доступы, например, с помощью блокировок.Но если вы сделаете это, вы можете просто получить доступ к контексту из одного потока;обычно это проще и почти всегда быстрее - и тогда у вас не возникнет проблем с транзакциями.
Если вы настаиваете на ручной синхронизации доступа к ObjectContext
вместо использования потока, вы также можете использовать простойCommittableTransaction
и передать это по простоте, а не использовать внешнюю транзакцию;так как вам все равно придется вручную управлять транзакцией, это более понятно сделать с помощью явного дескриптора объекта, а не хитрых переходов состояний (где точные детали того, какой поток выполняет то, что важно, но не явно в коде).
Кстати, если вы все же используете транзакцию окружения, я был бы осторожен с планированием задач, особенно с асинхронной функцией C # 5, так как вам может потребоваться четко знать, когда выполнение может изменить поток (Я никогда не пробовал этого, поэтому я не могу дать вам никаких указателей, к сожалению).
Резюме: просто не делайте этого: вы не получаете параллелизм благодаря многопоточности из-за ограничений ObjectContext
(и на практике, БД), так что вы могли бы также оставить одну транзакцию в одном потоке и сохранить ее простотой.Будущие сопровождающие будут благодарить вас за ясность.