Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / System.Runtime.DurableInstancing / System / Runtime / TimeoutHelper.cs / 1305376 / TimeoutHelper.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Runtime { using System; using System.Threading; struct TimeoutHelper { DateTime deadline; bool deadlineSet; TimeSpan originalTimeout; public static readonly TimeSpan MaxWait = TimeSpan.FromMilliseconds(Int32.MaxValue); public TimeoutHelper(TimeSpan timeout) { Fx.Assert(timeout >= TimeSpan.Zero, "timeout must be non-negative"); this.originalTimeout = timeout; this.deadline = DateTime.MaxValue; this.deadlineSet = (timeout == TimeSpan.MaxValue); } public TimeSpan OriginalTimeout { get { return this.originalTimeout; } } public static bool IsTooLarge(TimeSpan timeout) { return (timeout > TimeoutHelper.MaxWait) && (timeout != TimeSpan.MaxValue); } public static TimeSpan FromMilliseconds(int milliseconds) { if (milliseconds == Timeout.Infinite) { return TimeSpan.MaxValue; } else { return TimeSpan.FromMilliseconds(milliseconds); } } public static int ToMilliseconds(TimeSpan timeout) { if (timeout == TimeSpan.MaxValue) { return Timeout.Infinite; } else { long ticks = Ticks.FromTimeSpan(timeout); if (ticks / TimeSpan.TicksPerMillisecond > int.MaxValue) { return int.MaxValue; } return Ticks.ToMilliseconds(ticks); } } public static TimeSpan Min(TimeSpan val1, TimeSpan val2) { if (val1 > val2) { return val2; } else { return val1; } } public static TimeSpan Add(TimeSpan timeout1, TimeSpan timeout2) { return Ticks.ToTimeSpan(Ticks.Add(Ticks.FromTimeSpan(timeout1), Ticks.FromTimeSpan(timeout2))); } public static DateTime Add(DateTime time, TimeSpan timeout) { if (timeout >= TimeSpan.Zero && DateTime.MaxValue - time <= timeout) { return DateTime.MaxValue; } if (timeout <= TimeSpan.Zero && DateTime.MinValue - time >= timeout) { return DateTime.MinValue; } return time + timeout; } public static DateTime Subtract(DateTime time, TimeSpan timeout) { return Add(time, TimeSpan.Zero - timeout); } public static TimeSpan Divide(TimeSpan timeout, int factor) { if (timeout == TimeSpan.MaxValue) { return TimeSpan.MaxValue; } return Ticks.ToTimeSpan((Ticks.FromTimeSpan(timeout) / factor) + 1); } public TimeSpan RemainingTime() { if (!this.deadlineSet) { this.SetDeadline(); return this.originalTimeout; } else if (this.deadline == DateTime.MaxValue) { return TimeSpan.MaxValue; } else { TimeSpan remaining = this.deadline - DateTime.UtcNow; if (remaining <= TimeSpan.Zero) { return TimeSpan.Zero; } else { return remaining; } } } public TimeSpan ElapsedTime() { return this.originalTimeout - this.RemainingTime(); } void SetDeadline() { Fx.Assert(!deadlineSet, "TimeoutHelper deadline set twice."); this.deadline = DateTime.UtcNow + this.originalTimeout; this.deadlineSet = true; } public static void ThrowIfNegativeArgument(TimeSpan timeout) { ThrowIfNegativeArgument(timeout, "timeout"); } public static void ThrowIfNegativeArgument(TimeSpan timeout, string argumentName) { if (timeout < TimeSpan.Zero) { throw Fx.Exception.ArgumentOutOfRange(argumentName, timeout, SRCore.TimeoutMustBeNonNegative(argumentName, timeout)); } } public static void ThrowIfNonPositiveArgument(TimeSpan timeout) { ThrowIfNonPositiveArgument(timeout, "timeout"); } public static void ThrowIfNonPositiveArgument(TimeSpan timeout, string argumentName) { if (timeout <= TimeSpan.Zero) { throw Fx.Exception.ArgumentOutOfRange(argumentName, timeout, SRCore.TimeoutMustBePositive(argumentName, timeout)); } } [Fx.Tag.Blocking] public static bool WaitOne(WaitHandle waitHandle, TimeSpan timeout) { ThrowIfNegativeArgument(timeout); if (timeout == TimeSpan.MaxValue) { waitHandle.WaitOne(); return true; } else { return waitHandle.WaitOne(timeout, false); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Runtime { using System; using System.Threading; struct TimeoutHelper { DateTime deadline; bool deadlineSet; TimeSpan originalTimeout; public static readonly TimeSpan MaxWait = TimeSpan.FromMilliseconds(Int32.MaxValue); public TimeoutHelper(TimeSpan timeout) { Fx.Assert(timeout >= TimeSpan.Zero, "timeout must be non-negative"); this.originalTimeout = timeout; this.deadline = DateTime.MaxValue; this.deadlineSet = (timeout == TimeSpan.MaxValue); } public TimeSpan OriginalTimeout { get { return this.originalTimeout; } } public static bool IsTooLarge(TimeSpan timeout) { return (timeout > TimeoutHelper.MaxWait) && (timeout != TimeSpan.MaxValue); } public static TimeSpan FromMilliseconds(int milliseconds) { if (milliseconds == Timeout.Infinite) { return TimeSpan.MaxValue; } else { return TimeSpan.FromMilliseconds(milliseconds); } } public static int ToMilliseconds(TimeSpan timeout) { if (timeout == TimeSpan.MaxValue) { return Timeout.Infinite; } else { long ticks = Ticks.FromTimeSpan(timeout); if (ticks / TimeSpan.TicksPerMillisecond > int.MaxValue) { return int.MaxValue; } return Ticks.ToMilliseconds(ticks); } } public static TimeSpan Min(TimeSpan val1, TimeSpan val2) { if (val1 > val2) { return val2; } else { return val1; } } public static TimeSpan Add(TimeSpan timeout1, TimeSpan timeout2) { return Ticks.ToTimeSpan(Ticks.Add(Ticks.FromTimeSpan(timeout1), Ticks.FromTimeSpan(timeout2))); } public static DateTime Add(DateTime time, TimeSpan timeout) { if (timeout >= TimeSpan.Zero && DateTime.MaxValue - time <= timeout) { return DateTime.MaxValue; } if (timeout <= TimeSpan.Zero && DateTime.MinValue - time >= timeout) { return DateTime.MinValue; } return time + timeout; } public static DateTime Subtract(DateTime time, TimeSpan timeout) { return Add(time, TimeSpan.Zero - timeout); } public static TimeSpan Divide(TimeSpan timeout, int factor) { if (timeout == TimeSpan.MaxValue) { return TimeSpan.MaxValue; } return Ticks.ToTimeSpan((Ticks.FromTimeSpan(timeout) / factor) + 1); } public TimeSpan RemainingTime() { if (!this.deadlineSet) { this.SetDeadline(); return this.originalTimeout; } else if (this.deadline == DateTime.MaxValue) { return TimeSpan.MaxValue; } else { TimeSpan remaining = this.deadline - DateTime.UtcNow; if (remaining <= TimeSpan.Zero) { return TimeSpan.Zero; } else { return remaining; } } } public TimeSpan ElapsedTime() { return this.originalTimeout - this.RemainingTime(); } void SetDeadline() { Fx.Assert(!deadlineSet, "TimeoutHelper deadline set twice."); this.deadline = DateTime.UtcNow + this.originalTimeout; this.deadlineSet = true; } public static void ThrowIfNegativeArgument(TimeSpan timeout) { ThrowIfNegativeArgument(timeout, "timeout"); } public static void ThrowIfNegativeArgument(TimeSpan timeout, string argumentName) { if (timeout < TimeSpan.Zero) { throw Fx.Exception.ArgumentOutOfRange(argumentName, timeout, SRCore.TimeoutMustBeNonNegative(argumentName, timeout)); } } public static void ThrowIfNonPositiveArgument(TimeSpan timeout) { ThrowIfNonPositiveArgument(timeout, "timeout"); } public static void ThrowIfNonPositiveArgument(TimeSpan timeout, string argumentName) { if (timeout <= TimeSpan.Zero) { throw Fx.Exception.ArgumentOutOfRange(argumentName, timeout, SRCore.TimeoutMustBePositive(argumentName, timeout)); } } [Fx.Tag.Blocking] public static bool WaitOne(WaitHandle waitHandle, TimeSpan timeout) { ThrowIfNegativeArgument(timeout); if (timeout == TimeSpan.MaxValue) { waitHandle.WaitOne(); return true; } else { return waitHandle.WaitOne(timeout, false); } } } } // 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
- Overlapped.cs
- Exceptions.cs
- TextSerializer.cs
- XmlSerializerAssemblyAttribute.cs
- Transactions.cs
- GuidTagList.cs
- xdrvalidator.cs
- HttpHandlerAction.cs
- SectionInput.cs
- CustomCategoryAttribute.cs
- TextEditor.cs
- EventSinkActivityDesigner.cs
- WindowsFormsSynchronizationContext.cs
- EventlogProvider.cs
- StateDesigner.Layouts.cs
- ObjectDataSourceDisposingEventArgs.cs
- UnsafeNativeMethodsPenimc.cs
- DBSchemaTable.cs
- TraceInternal.cs
- DoubleAnimationUsingKeyFrames.cs
- TextTrailingCharacterEllipsis.cs
- Sequence.cs
- BoolExpressionVisitors.cs
- WebPartAddingEventArgs.cs
- RecognizedAudio.cs
- SurrogateSelector.cs
- FontDifferentiator.cs
- RequestValidator.cs
- WsatTransactionInfo.cs
- HiddenField.cs
- Menu.cs
- EventSetter.cs
- HMAC.cs
- DefaultParameterValueAttribute.cs
- ExitEventArgs.cs
- GACIdentityPermission.cs
- XmlAutoDetectWriter.cs
- ToggleButtonAutomationPeer.cs
- DataControlImageButton.cs
- MetadataArtifactLoaderComposite.cs
- XmlBinaryReader.cs
- CommittableTransaction.cs
- WebScriptMetadataMessageEncoderFactory.cs
- BooleanExpr.cs
- Bezier.cs
- FileBasedResourceGroveler.cs
- MobileControl.cs
- PersonalizationProviderCollection.cs
- SaveFileDialog.cs
- BitStack.cs
- PagePropertiesChangingEventArgs.cs
- XmlEntity.cs
- WebProxyScriptElement.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- KnownBoxes.cs
- QilReplaceVisitor.cs
- DockPanel.cs
- OuterGlowBitmapEffect.cs
- SqlVisitor.cs
- SessionStateContainer.cs
- JsonWriterDelegator.cs
- RequestQueryProcessor.cs
- httpstaticobjectscollection.cs
- SQLInt16.cs
- Util.cs
- ColumnMapVisitor.cs
- BuildResultCache.cs
- ToolBarOverflowPanel.cs
- MenuItem.cs
- RequestResizeEvent.cs
- PassportAuthentication.cs
- TransformerConfigurationWizardBase.cs
- ReadOnlyDataSource.cs
- ZoomPercentageConverter.cs
- ControlIdConverter.cs
- SqlDataSourceDesigner.cs
- PasswordValidationException.cs
- DockProviderWrapper.cs
- BaseTemplateBuildProvider.cs
- ExecutionEngineException.cs
- DiscreteKeyFrames.cs
- CompilationUtil.cs
- ProjectionCamera.cs
- SystemNetHelpers.cs
- StreamAsIStream.cs
- ChtmlMobileTextWriter.cs
- StringKeyFrameCollection.cs
- WebFaultClientMessageInspector.cs
- ZeroOpNode.cs
- WindowsToolbarItemAsMenuItem.cs
- FlagsAttribute.cs
- OdbcCommand.cs
- SmiEventSink_Default.cs
- MarkupObject.cs
- ReadOnlyMetadataCollection.cs
- EndpointNameMessageFilter.cs
- EditableTreeList.cs
- RandomNumberGenerator.cs
- LocalizabilityAttribute.cs
- StreamSecurityUpgradeAcceptorAsyncResult.cs