Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities.DurableInstancing / System / Activities / DurableInstancing / LoadRetryAsyncResult.cs / 1305376 / LoadRetryAsyncResult.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.DurableInstancing { using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Runtime; using System.Runtime.DurableInstancing; class LoadRetryAsyncResult : AsyncResult { static AsyncCallback onTryCommandCallback = Fx.ThunkCallback(new AsyncCallback(OnTryCommandCallback)); bool commandSuccess; TimeoutHelper commandTimeout; InstanceLockedException lastInstanceLockedException; int retryCount; public LoadRetryAsyncResult(SqlWorkflowInstanceStore store, InstancePersistenceContext context, InstancePersistenceCommand command, TimeSpan timeout, AsyncCallback callback, object state) : base(callback, state) { this.InstanceStore = store; this.InstancePersistenceContext = context; this.InstancePersistenceCommand = command; this.commandTimeout = new TimeoutHelper(timeout); InstanceStore.BeginTryCommandInternal(this.InstancePersistenceContext, this.InstancePersistenceCommand, this.commandTimeout.RemainingTime(), LoadRetryAsyncResult.onTryCommandCallback, this); } public SqlWorkflowInstanceStore InstanceStore { get; private set; } public TimeSpan RetryTimeout { get; private set; } InstancePersistenceCommand InstancePersistenceCommand { get; set; } InstancePersistenceContext InstancePersistenceContext { get; set; } public static bool End(IAsyncResult result) { LoadRetryAsyncResult thisPtr = AsyncResult.End(result); return thisPtr.commandSuccess; } public void AbortRetry() { Fx.Assert(this.lastInstanceLockedException != null, "no last instance lock exception"); this.Complete(false, this.lastInstanceLockedException); } public void Retry() { InstanceStore.BeginTryCommandInternal(this.InstancePersistenceContext, this.InstancePersistenceCommand, this.commandTimeout.RemainingTime(), LoadRetryAsyncResult.onTryCommandCallback, this); } [SuppressMessage(FxCop.Category.Design, FxCop.Rule.DoNotCatchGeneralExceptionTypes, Justification = "Standard AsyncResult callback pattern.")] static void OnTryCommandCallback(IAsyncResult result) { LoadRetryAsyncResult tryCommandAsyncResult = (LoadRetryAsyncResult)(result.AsyncState); Exception completeException = null; bool completeFlag = true; try { tryCommandAsyncResult.CompleteTryCommand(result); } catch (InstanceLockedException instanceLockedException) { TimeSpan retryDelay = tryCommandAsyncResult.InstanceStore.GetNextRetryDelay(++tryCommandAsyncResult.retryCount); if (retryDelay < tryCommandAsyncResult.commandTimeout.RemainingTime()) { tryCommandAsyncResult.RetryTimeout = retryDelay; if (tryCommandAsyncResult.InstanceStore.EnqueueRetry(tryCommandAsyncResult)) { tryCommandAsyncResult.lastInstanceLockedException = instanceLockedException; completeFlag = false; } } else if (TD.LockRetryTimeoutIsEnabled()) { TD.LockRetryTimeout(tryCommandAsyncResult.commandTimeout.OriginalTimeout.ToString()); } if (completeFlag) { completeException = instanceLockedException; } } catch (Exception exception) { if (Fx.IsFatal(exception)) { throw; } completeException = exception; } if (completeFlag) { tryCommandAsyncResult.Complete(false, completeException); } } void CompleteTryCommand(IAsyncResult result) { this.commandSuccess = this.InstanceStore.EndTryCommand(result); } } } // 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
- InheritedPropertyChangedEventArgs.cs
- ISAPIRuntime.cs
- Stylesheet.cs
- DescriptionAttribute.cs
- PageRanges.cs
- PerfCounters.cs
- CombinedGeometry.cs
- TimelineClockCollection.cs
- TreeNode.cs
- Restrictions.cs
- ObjectListItem.cs
- HtmlLink.cs
- SplitterPanelDesigner.cs
- PasswordTextNavigator.cs
- WorkflowServiceBehavior.cs
- Inline.cs
- BinaryFormatterWriter.cs
- XmlWrappingReader.cs
- HierarchicalDataBoundControl.cs
- ReadOnlyHierarchicalDataSource.cs
- JapaneseLunisolarCalendar.cs
- ReceiveContent.cs
- Path.cs
- DockAndAnchorLayout.cs
- XmlDataLoader.cs
- SqlTypesSchemaImporter.cs
- StyleHelper.cs
- RequiredFieldValidator.cs
- InternalTypeHelper.cs
- WSSecurityOneDotZeroReceiveSecurityHeader.cs
- SafeEventLogWriteHandle.cs
- ClientUtils.cs
- InvalidDocumentContentsException.cs
- ObjectStateEntryDbDataRecord.cs
- ADConnectionHelper.cs
- DataTableNewRowEvent.cs
- WindowsBrush.cs
- StandardOleMarshalObject.cs
- NameValuePair.cs
- LinqDataSourceValidationException.cs
- DataGridPagerStyle.cs
- CaseInsensitiveHashCodeProvider.cs
- PolicyReader.cs
- PeerResolverSettings.cs
- StringOutput.cs
- DataSourceProvider.cs
- XmlDomTextWriter.cs
- DrawingCollection.cs
- CompiledRegexRunnerFactory.cs
- RequestCachePolicy.cs
- Inflater.cs
- WhiteSpaceTrimStringConverter.cs
- WmlMobileTextWriter.cs
- FrameworkElement.cs
- LinkedList.cs
- RequestQueue.cs
- MethodAccessException.cs
- LongValidatorAttribute.cs
- AnonymousIdentificationModule.cs
- CompatibleIComparer.cs
- ComplexLine.cs
- Visual.cs
- HMAC.cs
- MetafileHeaderWmf.cs
- RemoteHelper.cs
- DictationGrammar.cs
- GenericFlowSwitchHelper.cs
- Soap.cs
- CapabilitiesSection.cs
- DigitalSignatureProvider.cs
- ToolStrip.cs
- Query.cs
- TextModifier.cs
- ECDiffieHellmanCngPublicKey.cs
- StylusCaptureWithinProperty.cs
- PackageProperties.cs
- ToolBarOverflowPanel.cs
- CallbackException.cs
- SubMenuStyle.cs
- TextBoxBase.cs
- WorkflowTransactionOptions.cs
- ArrayList.cs
- XamlBrushSerializer.cs
- XmlSchemaGroup.cs
- Terminate.cs
- PageThemeBuildProvider.cs
- FilePresentation.cs
- SerializerWriterEventHandlers.cs
- DecoderNLS.cs
- WebPartChrome.cs
- RunWorkerCompletedEventArgs.cs
- NetworkInterface.cs
- cookiecontainer.cs
- RuntimeArgumentHandle.cs
- StrokeNodeData.cs
- FrameworkElementFactoryMarkupObject.cs
- VectorAnimationBase.cs
- HtmlInputFile.cs
- ChildrenQuery.cs
- MobileControlsSectionHandler.cs