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
- ParameterInfo.cs
- NestedContainer.cs
- DSASignatureFormatter.cs
- UIElementHelper.cs
- CodeAttributeArgument.cs
- BevelBitmapEffect.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- COM2ComponentEditor.cs
- BoundField.cs
- Debug.cs
- PropertyGridCommands.cs
- SmiEventStream.cs
- GridSplitterAutomationPeer.cs
- ProviderConnectionPointCollection.cs
- WebControlParameterProxy.cs
- InvalidPrinterException.cs
- ScriptManagerProxy.cs
- WindowsStatic.cs
- CompareInfo.cs
- ColumnMapProcessor.cs
- RuntimeResourceSet.cs
- Binding.cs
- SplineKeyFrames.cs
- CanonicalXml.cs
- Cell.cs
- EFTableProvider.cs
- FieldBuilder.cs
- SweepDirectionValidation.cs
- TargetParameterCountException.cs
- HtmlGenericControl.cs
- SQLConvert.cs
- TextTreeDeleteContentUndoUnit.cs
- InternalControlCollection.cs
- TerminatorSinks.cs
- CodeIterationStatement.cs
- LinkButton.cs
- OrderingQueryOperator.cs
- DynamicHyperLink.cs
- Image.cs
- ComboBoxRenderer.cs
- PointCollection.cs
- SqlException.cs
- StringToken.cs
- CacheMemory.cs
- TraceSource.cs
- HandleCollector.cs
- SpeechDetectedEventArgs.cs
- InternalResources.cs
- GeneralTransformGroup.cs
- EntityClassGenerator.cs
- SaveRecipientRequest.cs
- MessageQueueKey.cs
- DeclarationUpdate.cs
- SimpleColumnProvider.cs
- ProxyWebPartManager.cs
- DetailsViewUpdateEventArgs.cs
- FileUtil.cs
- RemoteWebConfigurationHost.cs
- ProxyAttribute.cs
- EventProviderTraceListener.cs
- AttachmentCollection.cs
- HWStack.cs
- VerificationException.cs
- storepermissionattribute.cs
- MD5.cs
- LabelEditEvent.cs
- DbDataAdapter.cs
- RotateTransform.cs
- XmlSchemaObjectCollection.cs
- base64Transforms.cs
- ManipulationStartingEventArgs.cs
- SecurityTokenRequirement.cs
- SourceFileBuildProvider.cs
- TemplateControlParser.cs
- CFStream.cs
- DrawListViewColumnHeaderEventArgs.cs
- TextPointerBase.cs
- EditingCoordinator.cs
- PointCollectionConverter.cs
- OAVariantLib.cs
- ScriptResourceAttribute.cs
- SymbolEqualComparer.cs
- _NativeSSPI.cs
- DesignBindingPropertyDescriptor.cs
- XPathNavigatorReader.cs
- HitTestResult.cs
- HttpGetClientProtocol.cs
- MetroSerializationManager.cs
- XComponentModel.cs
- DesignSurfaceManager.cs
- ExceptionUtil.cs
- SafeHandles.cs
- DataGridCommandEventArgs.cs
- Convert.cs
- InfoCardListRequest.cs
- BindStream.cs
- TypedOperationInfo.cs
- UIHelper.cs
- Merger.cs
- DrawingCollection.cs