Как я могу разделить транзакцию через набор параллельных задач - PullRequest
4 голосов
/ 20 августа 2010

У меня есть объект TransactionScope, и я хочу использовать его для всех задач, созданных с помощью Parallel.ForEach, как мне этого добиться?

Я хочу параллельно вести запись в очередь сообщений, 20-50сообщения, очередь сообщений является транзакционной:

 using (var queue = new MessageQueue(_exportEndpoint))
 {
      var label = string.Format("{0} ComponentId - {1}", DateTime.Now.ToUniversalTime(), componentId);
      queue.Send(contents, label, MessageQueueTransactionType.Automatic);
      _log.WriteInfo("ExportToQueue: Message sent to queue - " + label);
 }

И основной поток использует объект TransactionScope, я попытался выполнить следующее, но у меня истекло время ожидания при совершении транзакции:

var clone = Transaction.Current.DependentClone(DependentCloneOption.RollbackIfNotComplete);
Parallel.ForEach(components.ToList(), c => ExportComponent(c, clone));

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

отсортировано!

Мне не хватало Complete для DependentTransaction

0 голосов
/ 20 августа 2010

Пока эти задачи участвуют индивидуально в контексте транзакции, она прозрачна. Другими словами, оберните ваш foreach областью транзакции, и все готово.

...