Я хотел бы знать, почему запуск этой программы вызывает взаимные блокировки таблицы dbo.tb_Push при одновременном запуске нескольких экземпляров одной и той же программы. Я знаю, что сериализуемая область транзакции является проблемой, но мне хотелось бы объяснить, почемуобновление до тупиков dbo.tb_Push, обновления всегда передают разные значения для каждого экземпляра программы, спасибо.
using (var transactionScope =
new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.Serializable, Timeout = TransactionManager.DefaultTimeout }))
{
TransactionInterop.GetTransmitterPropagationToken(Transaction.Current);
try
{
using (repository = new Repository(settings))
{
repoPush = repository.GetPushDAO();
price = repoPricingPush.GetNextPush(instance_name);
if (price.Count > 0)
{
//do stuff on other servers/db's
repoPricingPush.SavePushStatus(price[0].PushSid, true, true, null);
}
else
return;
}
transactionScope.Complete();
}
catch
{
throw;
}
finally
{
transactionScope.Dispose();
}
}
SavePushStatus - это хранимая процедура со следующим:
UPDATE dbo.tb_Push SET
[Processed] = @piProcessed,
[OOS] = @piOOS,
[Error] = @piError
WHERE
Price_Push_SID = @piPricePushSid;