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
- DataServiceQueryProvider.cs
- HttpRequest.cs
- GradientSpreadMethodValidation.cs
- PolyBezierSegmentFigureLogic.cs
- WebPartExportVerb.cs
- FontFamilyValueSerializer.cs
- HttpWrapper.cs
- PartialCachingControl.cs
- PositiveTimeSpanValidatorAttribute.cs
- DbDataRecord.cs
- FullTextBreakpoint.cs
- BeginEvent.cs
- InputDevice.cs
- RequestCachePolicy.cs
- EdmToObjectNamespaceMap.cs
- MissingManifestResourceException.cs
- XamlBrushSerializer.cs
- FontSourceCollection.cs
- StopRoutingHandler.cs
- DataGridViewToolTip.cs
- FixedHighlight.cs
- TemplateParser.cs
- PathGeometry.cs
- Opcode.cs
- ApplicationHost.cs
- XmlExtensionFunction.cs
- SettingsPropertyValueCollection.cs
- RadioButtonBaseAdapter.cs
- QilSortKey.cs
- CqlGenerator.cs
- PropertyBuilder.cs
- _TransmitFileOverlappedAsyncResult.cs
- DisplayInformation.cs
- ComponentChangingEvent.cs
- TableDetailsCollection.cs
- SingleAnimation.cs
- WindowHideOrCloseTracker.cs
- Soap.cs
- SRGSCompiler.cs
- Brush.cs
- CryptoApi.cs
- ActiveXHost.cs
- ProfileGroupSettings.cs
- SetState.cs
- ThicknessAnimationBase.cs
- RepeaterCommandEventArgs.cs
- SqlSelectClauseBuilder.cs
- PhysicalFontFamily.cs
- SplitContainer.cs
- RegistryConfigurationProvider.cs
- MaterialGroup.cs
- SqlFunctionAttribute.cs
- LinqDataSourceValidationException.cs
- LockCookie.cs
- DirectoryObjectSecurity.cs
- PaintValueEventArgs.cs
- Token.cs
- HttpResponseInternalBase.cs
- ImpersonateTokenRef.cs
- SystemUnicastIPAddressInformation.cs
- ColumnMapProcessor.cs
- TextEditorThreadLocalStore.cs
- ButtonAutomationPeer.cs
- ConnectivityStatus.cs
- GC.cs
- IsolatedStorageFileStream.cs
- DataGridParentRows.cs
- FileUtil.cs
- WebScriptMetadataMessage.cs
- QilGeneratorEnv.cs
- Helper.cs
- RawAppCommandInputReport.cs
- CodeDomComponentSerializationService.cs
- NullableDoubleSumAggregationOperator.cs
- HandlerBase.cs
- XmlHierarchicalDataSourceView.cs
- MetadataItemEmitter.cs
- SBCSCodePageEncoding.cs
- EntitySqlQueryCacheEntry.cs
- Wildcard.cs
- TypeInfo.cs
- SiteMapDataSource.cs
- Stylesheet.cs
- ButtonChrome.cs
- BindingManagerDataErrorEventArgs.cs
- TypeDescriptionProviderAttribute.cs
- GridViewSortEventArgs.cs
- Line.cs
- ColumnBinding.cs
- PageAdapter.cs
- AssemblyNameProxy.cs
- StringCollectionEditor.cs
- ProtocolsConfigurationHandler.cs
- WebConfigurationHost.cs
- ErrorFormatter.cs
- FilterEventArgs.cs
- CodeIdentifiers.cs
- FixedPageProcessor.cs
- FrameworkObject.cs
- DataBindingCollection.cs