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
- SQLUtility.cs
- PreservationFileWriter.cs
- FilterQueryOptionExpression.cs
- DbDeleteCommandTree.cs
- InvalidOperationException.cs
- PropertyDescriptorComparer.cs
- PrintPreviewDialog.cs
- Internal.cs
- ResourceDescriptionAttribute.cs
- DataTrigger.cs
- CultureTable.cs
- ContactManager.cs
- OdbcException.cs
- XhtmlBasicValidationSummaryAdapter.cs
- ToolStripDesignerUtils.cs
- ToolStripDropDownClosingEventArgs.cs
- QueryExecutionOption.cs
- arabicshape.cs
- formatter.cs
- DiagnosticTraceSource.cs
- ImageSourceValueSerializer.cs
- MembershipValidatePasswordEventArgs.cs
- SessionStateContainer.cs
- WindowsGraphics.cs
- SwitchElementsCollection.cs
- SynchronizedInputProviderWrapper.cs
- PlainXmlWriter.cs
- PersistenceTypeAttribute.cs
- TrackingDataItemValue.cs
- EnumUnknown.cs
- OAVariantLib.cs
- SerialPinChanges.cs
- SelectionPatternIdentifiers.cs
- UiaCoreProviderApi.cs
- TextProperties.cs
- ReferencedCollectionType.cs
- ClientBuildManager.cs
- SmiXetterAccessMap.cs
- GlobalAllocSafeHandle.cs
- OrthographicCamera.cs
- HttpResponse.cs
- MergeFilterQuery.cs
- TypeConverterHelper.cs
- Interlocked.cs
- DataGridViewRowCancelEventArgs.cs
- DocumentNUp.cs
- PeerService.cs
- URLAttribute.cs
- NullReferenceException.cs
- ExeContext.cs
- AuthenticationService.cs
- BrowsableAttribute.cs
- HMACSHA512.cs
- Config.cs
- ISFClipboardData.cs
- ProfileProvider.cs
- AttachmentCollection.cs
- PenThread.cs
- XmlSchemaException.cs
- TraceUtility.cs
- WebBrowsableAttribute.cs
- ImmutablePropertyDescriptorGridEntry.cs
- ObjectParameterCollection.cs
- ControlLocalizer.cs
- HitTestDrawingContextWalker.cs
- PackageProperties.cs
- ImageBrush.cs
- Component.cs
- StatusBar.cs
- DragEventArgs.cs
- ProcessProtocolHandler.cs
- Invariant.cs
- IssuanceLicense.cs
- TextFindEngine.cs
- CodeCommentStatement.cs
- WebPartMenu.cs
- PrefixQName.cs
- AudioDeviceOut.cs
- GridViewColumnCollectionChangedEventArgs.cs
- MetadataItem.cs
- StaticSiteMapProvider.cs
- EmptyEnumerator.cs
- GridErrorDlg.cs
- CategoryValueConverter.cs
- InstanceStoreQueryResult.cs
- SessionState.cs
- ProfileProvider.cs
- Zone.cs
- ListParagraph.cs
- SQLInt32.cs
- FileDialogCustomPlace.cs
- WebHeaderCollection.cs
- IdentityNotMappedException.cs
- ProcessThreadDesigner.cs
- SchemaCreator.cs
- WebPartEventArgs.cs
- RelOps.cs
- WeakReferenceList.cs
- TagPrefixInfo.cs
- VarRefManager.cs