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
- SerializationInfo.cs
- SelectionPattern.cs
- Internal.cs
- DictionaryMarkupSerializer.cs
- TdsParserStaticMethods.cs
- HtmlInputSubmit.cs
- SubpageParagraph.cs
- XmlDocumentType.cs
- CodeMethodInvokeExpression.cs
- UnauthorizedAccessException.cs
- QueryContinueDragEvent.cs
- VarInfo.cs
- X509DefaultServiceCertificateElement.cs
- PatternMatcher.cs
- OrderedDictionary.cs
- CoreSwitches.cs
- PresentationTraceSources.cs
- DiscoveryServiceExtension.cs
- AmbiguousMatchException.cs
- TypeDefinition.cs
- DecodeHelper.cs
- CrossSiteScriptingValidation.cs
- PeerHopCountAttribute.cs
- FormsAuthenticationEventArgs.cs
- X509SecurityToken.cs
- SeekableReadStream.cs
- AsymmetricAlgorithm.cs
- Graph.cs
- PerfCounterSection.cs
- Clipboard.cs
- ClientBuildManager.cs
- Pen.cs
- DSASignatureFormatter.cs
- RegexCaptureCollection.cs
- DefaultPerformanceCounters.cs
- querybuilder.cs
- ContentPosition.cs
- GridViewSortEventArgs.cs
- ISAPIRuntime.cs
- SHA1.cs
- PageThemeCodeDomTreeGenerator.cs
- PathFigureCollectionValueSerializer.cs
- XmlSignatureProperties.cs
- OpCodes.cs
- SQLMembershipProvider.cs
- CompoundFileStorageReference.cs
- DynamicResourceExtensionConverter.cs
- MemoryMappedView.cs
- COAUTHINFO.cs
- ObjectItemCollection.cs
- MobileCapabilities.cs
- BypassElementCollection.cs
- DependencyObject.cs
- SchemaType.cs
- StateChangeEvent.cs
- ErrorInfoXmlDocument.cs
- ListControl.cs
- ApplicationDirectory.cs
- ProcessHostMapPath.cs
- NamespaceMapping.cs
- EntityDataSourceState.cs
- DataControlFieldHeaderCell.cs
- InputGestureCollection.cs
- BitmapEffectGroup.cs
- PageParser.cs
- TriState.cs
- RuntimeArgumentHandle.cs
- TransactionTable.cs
- LeftCellWrapper.cs
- SoapSchemaMember.cs
- WhitespaceRuleLookup.cs
- SqlException.cs
- NavigationPropertyEmitter.cs
- BindingExpressionUncommonField.cs
- LastQueryOperator.cs
- PageWrapper.cs
- CheckBoxRenderer.cs
- PointLightBase.cs
- EventLogEntryCollection.cs
- NativeObjectSecurity.cs
- PaperSize.cs
- DisplayInformation.cs
- ExecutionContext.cs
- SoapIgnoreAttribute.cs
- WrapPanel.cs
- BaseProcessProtocolHandler.cs
- CompleteWizardStep.cs
- DataGridViewColumnConverter.cs
- SoapFault.cs
- PrinterUnitConvert.cs
- UnsafeNativeMethods.cs
- SqlParameter.cs
- SecurityKeyIdentifierClause.cs
- DefaultBinder.cs
- AggregateException.cs
- TextSelection.cs
- SizeF.cs
- EventLogEntryCollection.cs
- StateMachineDesignerPaint.cs
- UnsafeNativeMethods.cs