protected static void PoolableRollback(object state)
{
VolatileDemultiplexer demultiplexer = (VolatileDemultiplexer)state;
bool lockTaken = false;
try
{
Monitor.TryEnter(demultiplexer.transaction, 250, ref lockTaken);
if (lockTaken)
{
demultiplexer.InternalRollback();
}
else if (!ThreadPool.QueueUserWorkItem(RollbackCallback, demultiplexer))
{
throw TransactionException.CreateInvalidOperationException(System.Transactions.SR.GetString("TraceSourceLtm"), System.Transactions.SR.GetString("UnexpectedFailureOfThreadPool"), null);
}
}
finally
{
if (lockTaken)
{
Monitor.Exit(demultiplexer.transaction);
}
}
}