я собирался через кусок кода и наткнулся на следующие:TransactionScope и WCF обратного вызова
using(var transactionScope = new TransactionScope(TransactionScopeOption.Required, new TransactionScopeOptions { IsolationLevel = IsolationLevel.Snapshot })
{
List<Task> tasks = new List<Task>();
try
{
// Perform some database operation to read data (These operations are happening with a transaction scope having scopeoption as "Required" and isolationlevel as "ReadCommitted")
// Filter the data
// At this point the code already has a reference to a WCF duplex callback
// Create a List<Task> and a
foreach(var data in List<SomeData>)
{
var task = Task.Factory.StartNew(() => {
**(WCF Duplex Callback Instance).Process(data);**
});
tasks.Add(task);
}
}
catch(Exception ex)
{
// Log exception details
}
transactionScope.Complete();
}
try
{
Task.WaitAll(tasks);
}
catch(AggregateException ae)
{
ae.Handle(ex => {
// log exception details
return true;
});
}
Вопросы: Уровень изоляции
Родитель сделка является «Snapshot» в то время как внутренняя база данных reads используют «ReadCommitted». Каков будет фактический уровень изоляции транзакций?
Предположим, что есть две задачи. Задача 1 обрабатывает просто отлично и отправляет клиенту WCF по каналу обратного вызова. Но задача 2 вызывает исключение. Думаю, в это время все действия, выполняемые в пределах родительской транзакции, должны откат. Но я не уверен, что это означает откат набора данных, уже отправленных по каналу обратного вызова WCF, который достиг клиента.