Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / WorkflowPersistenceContext.cs / 1305376 / WorkflowPersistenceContext.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities { using System.Collections.Generic; using System.Transactions; using System.Runtime; class WorkflowPersistenceContext { CommittableTransaction contextOwnedTransaction; Transaction clonedTransaction; public WorkflowPersistenceContext(bool transactionRequired, TimeSpan transactionTimeout) : this(transactionRequired, CloneAmbientTransaction(), transactionTimeout) { } public WorkflowPersistenceContext(bool transactionRequired, Transaction transactionToUse, TimeSpan transactionTimeout) { if (transactionToUse != null) { this.clonedTransaction = transactionToUse; } else if (transactionRequired) { this.contextOwnedTransaction = new CommittableTransaction(transactionTimeout); // Clone it so that we don't pass a CommittableTransaction to the participants this.clonedTransaction = this.contextOwnedTransaction.Clone(); } } public Transaction PublicTransaction { get { return this.clonedTransaction; } } public void Abort() { if (this.contextOwnedTransaction != null) { try { this.contextOwnedTransaction.Rollback(); } catch (Exception e) { if (Fx.IsFatal(e)) { throw; } // ---- these exceptions as we are already on the error path } } } public void Complete() { if (this.contextOwnedTransaction != null) { this.contextOwnedTransaction.Commit(); } } // Returns true if end needs to be called // Note: this is side effecting even if it returns false public bool TryBeginComplete(AsyncCallback callback, object state, out IAsyncResult result) { // In the interest of allocating less objects we don't implement // the full async pattern here. Instead, we've flattened it to // do the [....] part and then optionally delegate down to the inner // BeginCommit. if (this.contextOwnedTransaction != null) { result = this.contextOwnedTransaction.BeginCommit(callback, state); return true; } else { result = null; return false; } } public void EndComplete(IAsyncResult result) { Fx.Assert(this.contextOwnedTransaction != null, "We must have a contextOwnedTransaction if we are calling End"); this.contextOwnedTransaction.EndCommit(result); } // We might as well clone the ambient transaction so that PersistenceParticipants // can't cast to a CommittableTransaction. static Transaction CloneAmbientTransaction() { Transaction ambientTransaction = Transaction.Current; return ambientTransaction == null ? null : ambientTransaction.Clone(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HopperCache.cs
- Line.cs
- SymbolMethod.cs
- MultiTrigger.cs
- FlowLayoutPanel.cs
- IntSecurity.cs
- MonitorWrapper.cs
- PageThemeParser.cs
- StreamUpgradeBindingElement.cs
- DataGridViewRowCollection.cs
- WriteableBitmap.cs
- XmlQueryStaticData.cs
- Column.cs
- WorkflowRuntimeService.cs
- DataSourceProvider.cs
- NotifyCollectionChangedEventArgs.cs
- TypeDelegator.cs
- WriteFileContext.cs
- FullTextBreakpoint.cs
- StagingAreaInputItem.cs
- XmlBinaryReader.cs
- SyndicationContent.cs
- XmlReaderSettings.cs
- TextElementEnumerator.cs
- PathSegmentCollection.cs
- SchemaLookupTable.cs
- ListViewEditEventArgs.cs
- DefaultClaimSet.cs
- DependencySource.cs
- OleDbParameter.cs
- ValueUnavailableException.cs
- DataControlFieldHeaderCell.cs
- XmlQueryTypeFactory.cs
- ViewBox.cs
- _Semaphore.cs
- mongolianshape.cs
- SignatureResourcePool.cs
- ServiceBehaviorElement.cs
- BrowserCapabilitiesCompiler.cs
- ApplicationFileCodeDomTreeGenerator.cs
- XmlNodeComparer.cs
- CommandHelpers.cs
- BezierSegment.cs
- DataSourceExpressionCollection.cs
- SoapIgnoreAttribute.cs
- ConnectionManagementSection.cs
- DurableErrorHandler.cs
- DbProviderConfigurationHandler.cs
- GeometryHitTestResult.cs
- basecomparevalidator.cs
- SubqueryRules.cs
- HttpRuntimeSection.cs
- ThreadAbortException.cs
- loginstatus.cs
- LifetimeServices.cs
- DesignerView.Commands.cs
- TransformerTypeCollection.cs
- IOThreadTimer.cs
- RegexCaptureCollection.cs
- WebPartDescription.cs
- ProcessHostConfigUtils.cs
- HtmlForm.cs
- MetadataHelper.cs
- DataGridViewRowPrePaintEventArgs.cs
- StateValidator.cs
- SourceLineInfo.cs
- VirtualPathUtility.cs
- TextRangeSerialization.cs
- SafeArrayTypeMismatchException.cs
- CheckBoxPopupAdapter.cs
- ResourcePart.cs
- UrlAuthFailedErrorFormatter.cs
- ToolStripItemEventArgs.cs
- Panel.cs
- VolatileResourceManager.cs
- Funcletizer.cs
- FormsAuthenticationUserCollection.cs
- StagingAreaInputItem.cs
- CompilerScopeManager.cs
- ImageMapEventArgs.cs
- FileVersionInfo.cs
- ChildrenQuery.cs
- ApplicationActivator.cs
- DynamicRenderer.cs
- FontFamily.cs
- PathTooLongException.cs
- Splitter.cs
- MaterialGroup.cs
- KeyMatchBuilder.cs
- DynamicObject.cs
- CommandBinding.cs
- NegotiationTokenAuthenticator.cs
- Barrier.cs
- ToolStripPanel.cs
- DataSourceConverter.cs
- DataGridHelper.cs
- DataServiceProviderWrapper.cs
- Column.cs
- MappingException.cs
- StringValidator.cs