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
- DataServiceCollectionOfT.cs
- MessageQueueConverter.cs
- ContextProperty.cs
- connectionpool.cs
- OleDbException.cs
- ImageAttributes.cs
- HtmlTernaryTree.cs
- InvariantComparer.cs
- Int64AnimationUsingKeyFrames.cs
- TimeZone.cs
- FormClosedEvent.cs
- BrowserCapabilitiesFactory.cs
- DependencyPropertyDescriptor.cs
- DBNull.cs
- COAUTHINFO.cs
- LoginCancelEventArgs.cs
- BrushMappingModeValidation.cs
- EntitySqlQueryState.cs
- DesignerVerb.cs
- SoapIncludeAttribute.cs
- TextServicesContext.cs
- LongValidatorAttribute.cs
- ImageConverter.cs
- columnmapkeybuilder.cs
- FixedTextPointer.cs
- DataStreams.cs
- isolationinterop.cs
- SqlCacheDependency.cs
- DropDownList.cs
- ToolStripDropDownClosingEventArgs.cs
- Directory.cs
- SHA1.cs
- LocationUpdates.cs
- ConnectionStringSettingsCollection.cs
- Schema.cs
- TrustLevel.cs
- StringBuilder.cs
- FixedTextSelectionProcessor.cs
- SwitchElementsCollection.cs
- CanonicalFormWriter.cs
- CommandID.cs
- SqlTopReducer.cs
- VisualStyleInformation.cs
- wgx_render.cs
- MetadataPropertyvalue.cs
- _AuthenticationState.cs
- Point.cs
- FileStream.cs
- BinaryVersion.cs
- MissingManifestResourceException.cs
- SerializationEventsCache.cs
- DiscreteKeyFrames.cs
- FontConverter.cs
- HttpListener.cs
- ImageCodecInfo.cs
- ArgumentOutOfRangeException.cs
- GuidTagList.cs
- BorderGapMaskConverter.cs
- BooleanAnimationBase.cs
- ChangePasswordDesigner.cs
- PublisherMembershipCondition.cs
- SoapExtensionReflector.cs
- XmlNodeChangedEventArgs.cs
- TemplateLookupAction.cs
- PropertyDescriptor.cs
- CapabilitiesRule.cs
- WebPartDisplayModeCancelEventArgs.cs
- OneToOneMappingSerializer.cs
- KeyGestureConverter.cs
- UInt32Converter.cs
- XmlIgnoreAttribute.cs
- webeventbuffer.cs
- ReadOnlyCollection.cs
- SerializerDescriptor.cs
- ComponentGuaranteesAttribute.cs
- BaseParagraph.cs
- ToolStripDropDownClosedEventArgs.cs
- ServiceEndpointElement.cs
- ConditionedDesigner.cs
- SoapObjectInfo.cs
- XamlStyleSerializer.cs
- RegisteredExpandoAttribute.cs
- DispatchWrapper.cs
- BamlTreeNode.cs
- ControlCachePolicy.cs
- VerticalAlignConverter.cs
- DataTemplateKey.cs
- DataGridPagingPage.cs
- ELinqQueryState.cs
- Gdiplus.cs
- Buffer.cs
- TrackingParticipant.cs
- UniqueID.cs
- FormattedText.cs
- ColumnMapCopier.cs
- SQLStringStorage.cs
- WebCodeGenerator.cs
- SynchronizedDispatch.cs
- DataGridViewRowsRemovedEventArgs.cs
- EmissiveMaterial.cs