Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TransactionScope.cs
Go to the documentation of this file.
3
4namespace System.Transactions;
5
6[UnsupportedOSPlatform("browser")]
7public sealed class TransactionScope : IDisposable
8{
9 private bool _complete;
10
12
14
16
18
20
22
24
26
27 private bool _disposed;
28
30
32
34
36
37 internal bool ScopeComplete => _complete;
38
40
41 internal ContextKey? ContextKey { get; private set; }
42
43 internal bool AsyncFlowEnabled { get; private set; }
44
47 {
48 }
49
51 : this(scopeOption, TransactionScopeAsyncFlowOption.Suppress)
52 {
53 }
54
56 : this(TransactionScopeOption.Required, asyncFlowOption)
57 {
58 }
59
61 {
63 if (log.IsEnabled())
64 {
65 log.MethodEnter(TraceSourceType.TraceSourceBase, this, ".ctor");
66 }
67 ValidateAndSetAsyncFlowOption(asyncFlowOption);
68 if (NeedToCreateTransaction(scopeOption))
69 {
72 }
73 if (null == _expectedCurrent)
74 {
75 if (log.IsEnabled())
76 {
78 }
79 }
80 else
81 {
82 TransactionScopeResult transactionScopeResult = ((null == _committableTransaction) ? TransactionScopeResult.UsingExistingCurrent : TransactionScopeResult.CreatedTransaction);
83 if (log.IsEnabled())
84 {
86 }
87 }
88 PushScope();
89 if (log.IsEnabled())
90 {
91 log.MethodExit(TraceSourceType.TraceSourceBase, this, ".ctor");
92 }
93 }
94
95 public TransactionScope(TransactionScopeOption scopeOption, TimeSpan scopeTimeout)
96 : this(scopeOption, scopeTimeout, TransactionScopeAsyncFlowOption.Suppress)
97 {
98 }
99
100 public TransactionScope(TransactionScopeOption scopeOption, TimeSpan scopeTimeout, TransactionScopeAsyncFlowOption asyncFlowOption)
101 {
103 if (log.IsEnabled())
104 {
105 log.MethodEnter(TraceSourceType.TraceSourceBase, this, ".ctor");
106 }
107 ValidateScopeTimeout("scopeTimeout", scopeTimeout);
109 ValidateAndSetAsyncFlowOption(asyncFlowOption);
110 if (NeedToCreateTransaction(scopeOption))
111 {
114 }
115 if (null != _expectedCurrent && null == _committableTransaction && TimeSpan.Zero != scopeTimeout)
116 {
117 _scopeTimer = new Timer(TimerCallback, this, scopeTimeout, TimeSpan.Zero);
118 }
119 if (null == _expectedCurrent)
120 {
121 if (log.IsEnabled())
122 {
124 }
125 }
126 else
127 {
128 TransactionScopeResult transactionScopeResult = ((null == _committableTransaction) ? TransactionScopeResult.UsingExistingCurrent : TransactionScopeResult.CreatedTransaction);
129 if (log.IsEnabled())
130 {
132 }
133 }
134 PushScope();
135 if (log.IsEnabled())
136 {
137 log.MethodExit(TraceSourceType.TraceSourceBase, this, ".ctor");
138 }
139 }
140
141 public TransactionScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions)
142 : this(scopeOption, transactionOptions, TransactionScopeAsyncFlowOption.Suppress)
143 {
144 }
145
146 public TransactionScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions, TransactionScopeAsyncFlowOption asyncFlowOption)
147 {
149 if (log.IsEnabled())
150 {
151 log.MethodEnter(TraceSourceType.TraceSourceBase, this, ".ctor");
152 }
153 ValidateScopeTimeout("transactionOptions.Timeout", transactionOptions.Timeout);
154 TimeSpan timeout = transactionOptions.Timeout;
155 transactionOptions.Timeout = TransactionManager.ValidateTimeout(transactionOptions.Timeout);
157 ValidateAndSetAsyncFlowOption(asyncFlowOption);
158 if (NeedToCreateTransaction(scopeOption))
159 {
160 _committableTransaction = new CommittableTransaction(transactionOptions);
162 }
163 else if (null != _expectedCurrent && IsolationLevel.Unspecified != transactionOptions.IsolationLevel && _expectedCurrent.IsolationLevel != transactionOptions.IsolationLevel)
164 {
166 }
167 if (null != _expectedCurrent && null == _committableTransaction && TimeSpan.Zero != timeout)
168 {
170 }
171 if (null == _expectedCurrent)
172 {
173 if (log.IsEnabled())
174 {
176 }
177 }
178 else
179 {
180 TransactionScopeResult transactionScopeResult = ((null == _committableTransaction) ? TransactionScopeResult.UsingExistingCurrent : TransactionScopeResult.CreatedTransaction);
181 if (log.IsEnabled())
182 {
184 }
185 }
186 PushScope();
187 if (log.IsEnabled())
188 {
189 log.MethodExit(TraceSourceType.TraceSourceBase, this, ".ctor");
190 }
191 }
192
194 {
196 if (log.IsEnabled())
197 {
198 log.MethodEnter(TraceSourceType.TraceSourceBase, this, ".ctor");
199 }
200 ValidateScopeTimeout("transactionOptions.Timeout", transactionOptions.Timeout);
201 TimeSpan timeout = transactionOptions.Timeout;
202 transactionOptions.Timeout = TransactionManager.ValidateTimeout(transactionOptions.Timeout);
204 ValidateInteropOption(interopOption);
206 _interopOption = interopOption;
207 if (NeedToCreateTransaction(scopeOption))
208 {
209 _committableTransaction = new CommittableTransaction(transactionOptions);
211 }
212 else if (null != _expectedCurrent && IsolationLevel.Unspecified != transactionOptions.IsolationLevel && _expectedCurrent.IsolationLevel != transactionOptions.IsolationLevel)
213 {
215 }
216 if (null != _expectedCurrent && null == _committableTransaction && TimeSpan.Zero != timeout)
217 {
219 }
220 if (null == _expectedCurrent)
221 {
222 if (log.IsEnabled())
223 {
225 }
226 }
227 else
228 {
229 TransactionScopeResult transactionScopeResult = ((null == _committableTransaction) ? TransactionScopeResult.UsingExistingCurrent : TransactionScopeResult.CreatedTransaction);
230 if (log.IsEnabled())
231 {
233 }
234 }
235 PushScope();
236 if (log.IsEnabled())
237 {
238 log.MethodExit(TraceSourceType.TraceSourceBase, this, ".ctor");
239 }
240 }
241
242 public TransactionScope(Transaction transactionToUse)
243 : this(transactionToUse, TransactionScopeAsyncFlowOption.Suppress)
244 {
245 }
246
247 public TransactionScope(Transaction transactionToUse, TransactionScopeAsyncFlowOption asyncFlowOption)
248 {
250 if (log.IsEnabled())
251 {
252 log.MethodEnter(TraceSourceType.TraceSourceBase, this, ".ctor");
253 }
254 ValidateAndSetAsyncFlowOption(asyncFlowOption);
255 Initialize(transactionToUse, TimeSpan.Zero, interopModeSpecified: false);
256 if (log.IsEnabled())
257 {
258 log.MethodExit(TraceSourceType.TraceSourceBase, this, ".ctor");
259 }
260 }
261
262 public TransactionScope(Transaction transactionToUse, TimeSpan scopeTimeout)
263 : this(transactionToUse, scopeTimeout, TransactionScopeAsyncFlowOption.Suppress)
264 {
265 }
266
267 public TransactionScope(Transaction transactionToUse, TimeSpan scopeTimeout, TransactionScopeAsyncFlowOption asyncFlowOption)
268 {
270 if (log.IsEnabled())
271 {
272 log.MethodEnter(TraceSourceType.TraceSourceBase, this, ".ctor");
273 }
274 ValidateAndSetAsyncFlowOption(asyncFlowOption);
275 Initialize(transactionToUse, scopeTimeout, interopModeSpecified: false);
276 if (log.IsEnabled())
277 {
278 log.MethodExit(TraceSourceType.TraceSourceBase, this, ".ctor");
279 }
280 }
281
282 public TransactionScope(Transaction transactionToUse, TimeSpan scopeTimeout, EnterpriseServicesInteropOption interopOption)
283 {
285 if (log.IsEnabled())
286 {
287 log.MethodEnter(TraceSourceType.TraceSourceBase, this, ".ctor");
288 }
289 ValidateInteropOption(interopOption);
290 _interopOption = interopOption;
291 Initialize(transactionToUse, scopeTimeout, interopModeSpecified: true);
292 if (log.IsEnabled())
293 {
294 log.MethodExit(TraceSourceType.TraceSourceBase, this, ".ctor");
295 }
296 }
297
299 {
300 bool result = false;
302 switch (scopeOption)
303 {
304 case TransactionScopeOption.Suppress:
305 _expectedCurrent = null;
306 result = false;
307 break;
308 case TransactionScopeOption.Required:
310 if (null == _expectedCurrent)
311 {
312 result = true;
313 }
314 break;
315 case TransactionScopeOption.RequiresNew:
316 result = true;
317 break;
318 default:
319 throw new ArgumentOutOfRangeException("scopeOption");
320 }
321 return result;
322 }
323
324 private void Initialize(Transaction transactionToUse, TimeSpan scopeTimeout, bool interopModeSpecified)
325 {
326 if (null == transactionToUse)
327 {
328 throw new ArgumentNullException("transactionToUse");
329 }
330 ValidateScopeTimeout("scopeTimeout", scopeTimeout);
332 if (TimeSpan.Zero != scopeTimeout)
333 {
334 _scopeTimer = new Timer(TimerCallback, this, scopeTimeout, TimeSpan.Zero);
335 }
336 _expectedCurrent = transactionToUse;
337 _interopModeSpecified = interopModeSpecified;
339 if (log.IsEnabled())
340 {
342 }
343 PushScope();
344 }
345
346 public void Dispose()
347 {
348 bool flag = false;
350 if (log.IsEnabled())
351 {
352 log.MethodEnter(TraceSourceType.TraceSourceBase, this, "Dispose");
353 }
354 if (_disposed)
355 {
356 if (log.IsEnabled())
357 {
358 log.MethodExit(TraceSourceType.TraceSourceBase, this, "Dispose");
359 }
360 return;
361 }
363 {
364 if (log.IsEnabled())
365 {
366 log.InvalidOperation("TransactionScope", "InvalidScopeThread");
367 }
369 }
370 Exception ex = null;
371 try
372 {
373 _disposed = true;
375 Transaction contextTransaction = null;
376 Transaction transaction = Transaction.FastGetTransaction(currentScope, _threadContextData, out contextTransaction);
377 if (!Equals(currentScope))
378 {
379 if (currentScope == null)
380 {
382 if (transaction2 == null)
383 {
384 transaction2 = _dependentTransaction;
385 }
386 transaction2.Rollback();
387 flag = true;
389 }
390 if (currentScope._interopOption == EnterpriseServicesInteropOption.None && ((null != currentScope._expectedCurrent && !currentScope._expectedCurrent.Equals(transaction)) || (null != transaction && null == currentScope._expectedCurrent)))
391 {
392 TransactionTraceIdentifier currenttransactionID = ((!(null == transaction)) ? transaction.TransactionTraceId : TransactionTraceIdentifier.Empty);
393 TransactionTraceIdentifier newtransactionID = ((!(null == _expectedCurrent)) ? _expectedCurrent.TransactionTraceId : TransactionTraceIdentifier.Empty);
394 if (log.IsEnabled())
395 {
396 log.TransactionScopeCurrentChanged(currenttransactionID, newtransactionID);
397 }
398 ex = TransactionException.CreateInvalidOperationException(TraceSourceType.TraceSourceBase, System.SR.TransactionScopeIncorrectCurrent, null, (transaction == null) ? Guid.Empty : transaction.DistributedTxId);
399 if (null != transaction)
400 {
401 try
402 {
403 transaction.Rollback();
404 }
406 {
407 }
409 {
410 }
411 }
412 }
413 while (!Equals(currentScope))
414 {
415 if (ex == null)
416 {
417 ex = TransactionException.CreateInvalidOperationException(TraceSourceType.TraceSourceBase, System.SR.TransactionScopeInvalidNesting, null, (transaction == null) ? Guid.Empty : transaction.DistributedTxId);
418 }
419 if (null == currentScope._expectedCurrent)
420 {
421 if (log.IsEnabled())
422 {
424 }
425 }
426 else if (log.IsEnabled())
427 {
429 }
430 currentScope._complete = false;
431 try
432 {
433 currentScope.InternalDispose();
434 }
436 {
437 }
438 currentScope = _threadContextData.CurrentScope;
439 _complete = false;
440 }
441 }
442 else if (_interopOption == EnterpriseServicesInteropOption.None && ((null != _expectedCurrent && !_expectedCurrent.Equals(transaction)) || (null != transaction && null == _expectedCurrent)))
443 {
444 TransactionTraceIdentifier currenttransactionID2 = ((!(null == transaction)) ? transaction.TransactionTraceId : TransactionTraceIdentifier.Empty);
445 TransactionTraceIdentifier newtransactionID2 = ((!(null == _expectedCurrent)) ? _expectedCurrent.TransactionTraceId : TransactionTraceIdentifier.Empty);
446 if (log.IsEnabled())
447 {
448 log.TransactionScopeCurrentChanged(currenttransactionID2, newtransactionID2);
449 }
450 if (ex == null)
451 {
452 ex = TransactionException.CreateInvalidOperationException(TraceSourceType.TraceSourceBase, System.SR.TransactionScopeIncorrectCurrent, null, (transaction == null) ? Guid.Empty : transaction.DistributedTxId);
453 }
454 if (null != transaction)
455 {
456 try
457 {
458 transaction.Rollback();
459 }
461 {
462 }
464 {
465 }
466 }
467 _complete = false;
468 }
469 flag = true;
470 }
471 finally
472 {
473 if (!flag)
474 {
475 PopScope();
476 }
477 }
479 if (ex != null)
480 {
481 throw ex;
482 }
483 if (log.IsEnabled())
484 {
485 log.MethodExit(TraceSourceType.TraceSourceBase, this, "Dispose");
486 }
487 }
488
489 private void InternalDispose()
490 {
491 _disposed = true;
492 try
493 {
494 PopScope();
496 if (null == _expectedCurrent)
497 {
498 if (log.IsEnabled())
499 {
501 }
502 }
503 else if (log.IsEnabled())
504 {
506 }
507 if (!(null != _expectedCurrent))
508 {
509 return;
510 }
511 if (!_complete)
512 {
513 if (log.IsEnabled())
514 {
516 }
518 if (transaction == null)
519 {
520 transaction = _dependentTransaction;
521 }
522 transaction.Rollback();
523 }
524 else if (null != _committableTransaction)
525 {
527 }
528 else
529 {
531 }
532 }
533 finally
534 {
535 if (_scopeTimer != null)
536 {
538 }
539 if (null != _committableTransaction)
540 {
543 }
544 if (null != _dependentTransaction)
545 {
547 }
548 }
549 }
550
551 public void Complete()
552 {
554 if (log.IsEnabled())
555 {
556 log.MethodEnter(TraceSourceType.TraceSourceBase, this, "Complete");
557 }
558 if (_disposed)
559 {
560 throw new ObjectDisposedException("TransactionScope");
561 }
562 if (_complete)
563 {
565 }
566 _complete = true;
567 if (log.IsEnabled())
568 {
569 log.MethodExit(TraceSourceType.TraceSourceBase, this, "Complete");
570 }
571 }
572
573 private static void TimerCallback(object state)
574 {
575 if (!(state is TransactionScope transactionScope))
576 {
578 if (log.IsEnabled())
579 {
580 log.TransactionScopeInternalError("TransactionScopeTimerObjectInvalid");
581 }
583 }
584 transactionScope.Timeout();
585 }
586
587 private void Timeout()
588 {
589 if (_complete || !(null != _expectedCurrent))
590 {
591 return;
592 }
594 if (log.IsEnabled())
595 {
597 }
598 try
599 {
601 }
603 {
604 if (log.IsEnabled())
605 {
606 log.ExceptionConsumed(TraceSourceType.TraceSourceBase, exception);
607 }
608 }
609 catch (TransactionException exception2)
610 {
611 if (log.IsEnabled())
612 {
613 log.ExceptionConsumed(TraceSourceType.TraceSourceBase, exception2);
614 }
615 }
616 }
617
631
632 private void PushScope()
633 {
635 {
637 }
640 {
642 if (_savedCurrentScope == null && _savedCurrent == null)
643 {
644 ContextData.TLSCurrentData = null;
645 }
646 }
647 else
648 {
650 CallContextCurrentData.ClearCurrentData(ContextKey, removeContextData: false);
651 }
653 _threadContextData.CurrentScope = this;
654 }
655
656 private void PopScope()
657 {
658 bool flag = true;
660 {
661 CallContextCurrentData.ClearCurrentData(ContextKey, removeContextData: true);
662 }
664 {
666 }
667 if (_savedCurrentScope != null)
668 {
670 {
672 }
673 else
674 {
676 {
677 flag = false;
678 ContextData.TLSCurrentData = null;
679 }
680 else
681 {
683 }
685 }
686 }
687 else
688 {
689 CallContextCurrentData.ClearCurrentData(null, removeContextData: false);
691 {
692 flag = false;
693 ContextData.TLSCurrentData = null;
694 }
695 else
696 {
697 ContextData.TLSCurrentData = _threadContextData;
698 }
699 }
700 if (flag)
701 {
702 _threadContextData.CurrentScope = _savedCurrentScope;
704 }
705 }
706
707 private void SetCurrent(Transaction newCurrent)
708 {
709 if (_dependentTransaction == null && _committableTransaction == null && newCurrent != null)
710 {
711 _dependentTransaction = newCurrent.DependentClone(DependentCloneOption.RollbackIfNotComplete);
712 }
713 switch (_interopOption)
714 {
716 _threadContextData.CurrentTransaction = newCurrent;
717 break;
718 case EnterpriseServicesInteropOption.Automatic:
721 {
722 }
723 _threadContextData.CurrentTransaction = newCurrent;
724 break;
728 break;
729 }
730 }
731
732 private void SaveTLSContextData()
733 {
734 if (_savedTLSContextData == null)
735 {
736 _savedTLSContextData = new ContextData(asyncFlow: false);
737 }
738 _savedTLSContextData.CurrentScope = ContextData.TLSCurrentData.CurrentScope;
739 _savedTLSContextData.CurrentTransaction = ContextData.TLSCurrentData.CurrentTransaction;
740 _savedTLSContextData.DefaultComContextState = ContextData.TLSCurrentData.DefaultComContextState;
741 _savedTLSContextData.WeakDefaultComContext = ContextData.TLSCurrentData.WeakDefaultComContext;
742 }
743
745 {
746 if (_savedTLSContextData != null)
747 {
748 ContextData.TLSCurrentData.CurrentScope = _savedTLSContextData.CurrentScope;
749 ContextData.TLSCurrentData.CurrentTransaction = _savedTLSContextData.CurrentTransaction;
750 ContextData.TLSCurrentData.DefaultComContextState = _savedTLSContextData.DefaultComContextState;
751 ContextData.TLSCurrentData.WeakDefaultComContext = _savedTLSContextData.WeakDefaultComContext;
752 }
753 }
754
755 private void RestoreCurrent()
756 {
758 {
760 }
761 _threadContextData.CurrentTransaction = _contextTransaction;
762 }
763
765 {
766 if (interopOption < EnterpriseServicesInteropOption.None || interopOption > EnterpriseServicesInteropOption.Full)
767 {
768 throw new ArgumentOutOfRangeException("interopOption");
769 }
770 }
771
772 private void ValidateScopeTimeout(string paramName, TimeSpan scopeTimeout)
773 {
774 if (scopeTimeout < TimeSpan.Zero)
775 {
776 throw new ArgumentOutOfRangeException(paramName);
777 }
778 }
779
781 {
782 switch (asyncFlowOption)
783 {
784 default:
785 throw new ArgumentOutOfRangeException("asyncFlowOption");
787 AsyncFlowEnabled = true;
788 break;
790 break;
791 }
792 }
793
795 {
797 {
798 EnterpriseServicesInteropOption enterpriseServicesInteropOption = _interopOption;
800 {
801 enterpriseServicesInteropOption = Transaction.InteropMode(_savedCurrentScope);
802 }
803 if (enterpriseServicesInteropOption != 0)
804 {
806 }
807 }
808 }
809}
static string InternalError
Definition SR.cs:32
static string AsyncFlowAndESInteropNotSupported
Definition SR.cs:14
static string TransactionScopeIsolationLevelDifferentFromTransaction
Definition SR.cs:66
static string InvalidScopeThread
Definition SR.cs:40
static string DisposeScope
Definition SR.cs:26
static string TransactionScopeIncorrectCurrent
Definition SR.cs:62
static string TransactionScopeInvalidNesting
Definition SR.cs:64
static string TransactionScopeTimerObjectInvalid
Definition SR.cs:68
Definition SR.cs:7
static Thread CurrentThread
Definition Thread.cs:312
bool Dispose(WaitHandle notifyObject)
Definition Timer.cs:176
static ContextData CreateOrGetCurrentData(ContextKey contextKey)
static void ClearCurrentData(ContextKey contextKey, bool removeContextData)
DefaultComContextState DefaultComContextState
TransactionScope CurrentScope
Definition ContextData.cs:7
static ContextData TLSCurrentData
static void PushServiceDomain(Transaction newCurrent)
static TransactionException Create(string message, Exception innerException)
static Exception CreateInvalidOperationException(TraceSourceType traceSource, string message, Exception innerException)
static TimeSpan ValidateTimeout(TimeSpan transactionTimeout)
static void ValidateIsolationLevel(IsolationLevel transactionIsolationLevel)
TransactionScope(Transaction transactionToUse, TimeSpan scopeTimeout, TransactionScopeAsyncFlowOption asyncFlowOption)
EnterpriseServicesInteropOption InteropMode
TransactionScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions, EnterpriseServicesInteropOption interopOption)
TransactionScope(TransactionScopeAsyncFlowOption asyncFlowOption)
static void TimerCallback(object state)
TransactionScope(Transaction transactionToUse, TimeSpan scopeTimeout)
void Initialize(Transaction transactionToUse, TimeSpan scopeTimeout, bool interopModeSpecified)
EnterpriseServicesInteropOption _interopOption
TransactionScope(Transaction transactionToUse)
void ValidateScopeTimeout(string paramName, TimeSpan scopeTimeout)
TransactionScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions)
TransactionScope(TransactionScopeOption scopeOption, TimeSpan scopeTimeout, TransactionScopeAsyncFlowOption asyncFlowOption)
TransactionScope(TransactionScopeOption scopeOption)
TransactionScope(Transaction transactionToUse, TransactionScopeAsyncFlowOption asyncFlowOption)
void ValidateInteropOption(EnterpriseServicesInteropOption interopOption)
void ValidateAndSetAsyncFlowOption(TransactionScopeAsyncFlowOption asyncFlowOption)
void SetCurrent(Transaction newCurrent)
TransactionScope(Transaction transactionToUse, TimeSpan scopeTimeout, EnterpriseServicesInteropOption interopOption)
TransactionScope(TransactionScopeOption scopeOption, TransactionScopeAsyncFlowOption asyncFlowOption)
TransactionScope(TransactionScopeOption scopeOption, TimeSpan scopeTimeout)
TransactionScope(TransactionScopeOption scopeOption, TransactionOptions transactionOptions, TransactionScopeAsyncFlowOption asyncFlowOption)
bool NeedToCreateTransaction(TransactionScopeOption scopeOption)
CommittableTransaction _committableTransaction
static void GetCurrentTransactionAndScope(TxLookup defaultLookup, out Transaction current, out TransactionScope currentScope, out Transaction contextTransaction)
TransactionTraceIdentifier TransactionTraceId
static Transaction FastGetTransaction(TransactionScope currentScope, ContextData contextData, out Transaction contextTransaction)
static EnterpriseServicesInteropOption InteropMode(TransactionScope currentScope)
DependentTransaction DependentClone(DependentCloneOption cloneOption)
override bool Equals([NotNullWhen(true)] object? obj)
void TransactionScopeTimeout(TransactionTraceIdentifier transactionID)
void TransactionScopeCurrentChanged(TransactionTraceIdentifier currenttransactionID, TransactionTraceIdentifier newtransactionID)
void TransactionScopeDisposed(TransactionTraceIdentifier transactionID)
void InvalidOperation(string type, string operation)
void TransactionScopeCreated(TransactionTraceIdentifier transactionID, TransactionScopeResult transactionScopeResult)
void ExceptionConsumed(TraceSourceType traceSource, Exception exception)
void MethodExit(TraceSourceType traceSource, object thisOrContextObject, [CallerMemberName] string methodname=null)
static readonly TransactionsEtwProvider Log
void MethodEnter(TraceSourceType traceSource, object thisOrContextObject, [CallerMemberName] string methodname=null)
void TransactionScopeNestedIncorrectly(TransactionTraceIdentifier transactionID)
void TransactionScopeIncomplete(TransactionTraceIdentifier transactionID)
static readonly TimeSpan Zero
Definition TimeSpan.cs:21