Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PassportIdentity.cs
- TimeoutException.cs
- PrintingPermissionAttribute.cs
- RoleGroupCollection.cs
- HttpPostedFile.cs
- ToolboxComponentsCreatedEventArgs.cs
- TreeNodeBindingCollection.cs
- ModulesEntry.cs
- DefaultObjectMappingItemCollection.cs
- XmlSchemaNotation.cs
- AuthenticationManager.cs
- LinqDataSourceValidationException.cs
- CodeTypeParameterCollection.cs
- WebBrowserNavigatingEventHandler.cs
- _BufferOffsetSize.cs
- TypographyProperties.cs
- EntityDataSourceState.cs
- DataError.cs
- XamlRtfConverter.cs
- TextSegment.cs
- ListControlDataBindingHandler.cs
- FolderBrowserDialog.cs
- DirtyTextRange.cs
- Faults.cs
- WindowsRichEdit.cs
- ElementUtil.cs
- UTF8Encoding.cs
- Vector3DConverter.cs
- UInt16Converter.cs
- reliableinputsessionchannel.cs
- BitmapEffectDrawingContextWalker.cs
- TargetControlTypeAttribute.cs
- SqlTypeSystemProvider.cs
- MemberHolder.cs
- Assembly.cs
- PrimitiveXmlSerializers.cs
- ErrorTolerantObjectWriter.cs
- SessionStateModule.cs
- RNGCryptoServiceProvider.cs
- ListManagerBindingsCollection.cs
- ThousandthOfEmRealDoubles.cs
- _LocalDataStoreMgr.cs
- QuadraticBezierSegment.cs
- CqlWriter.cs
- XPathNodePointer.cs
- CornerRadiusConverter.cs
- XmlNodeWriter.cs
- SortQuery.cs
- PrintSchema.cs
- EncryptedXml.cs
- BindingExpressionUncommonField.cs
- DataBinder.cs
- ManifestResourceInfo.cs
- BamlTreeMap.cs
- BookmarkScopeHandle.cs
- PartialClassGenerationTask.cs
- InkCollectionBehavior.cs
- SiblingIterators.cs
- PlanCompilerUtil.cs
- ResXResourceSet.cs
- Polygon.cs
- ComplexPropertyEntry.cs
- SqlClientWrapperSmiStreamChars.cs
- PartialCachingAttribute.cs
- Pair.cs
- sqlpipe.cs
- NativeMethods.cs
- TablePattern.cs
- ListenDesigner.cs
- DataGrid.cs
- ApplicationManager.cs
- ValueTable.cs
- RoleService.cs
- BinaryConverter.cs
- InstanceData.cs
- TimersDescriptionAttribute.cs
- HuffmanTree.cs
- SchemaManager.cs
- SiteMapDataSource.cs
- System.Data.OracleClient_BID.cs
- XmlSerializationGeneratedCode.cs
- SplitContainer.cs
- PaginationProgressEventArgs.cs
- MenuItem.cs
- SessionStateContainer.cs
- MsmqBindingBase.cs
- RowUpdatingEventArgs.cs
- RootBuilder.cs
- TypeResolvingOptionsAttribute.cs
- FillBehavior.cs
- ParameterToken.cs
- BaseParagraph.cs
- SingleResultAttribute.cs
- ElementUtil.cs
- TraceXPathNavigator.cs
- CryptoStream.cs
- MimeBasePart.cs
- ConnectionStringsExpressionBuilder.cs
- BypassElementCollection.cs
- HttpHandlerActionCollection.cs