AsyncOperationContext.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Discovery / System / ServiceModel / Discovery / AsyncOperationContext.cs / 1305376 / AsyncOperationContext.cs

                            //---------------------------------------------------------------- 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//---------------------------------------------------------------
namespace System.ServiceModel.Discovery
{ 
    using System;
    using System.ComponentModel; 
    using System.Runtime; 
    using System.Threading;
    using System.Xml; 

    // WARNING: This object is not thread safe.
    // Use SyncRoot to protect access to methods and properties as required.
    abstract class AsyncOperationContext 
    {
        AsyncOperation asyncOperation; 
        TimeSpan duration; 
        bool isCompleted;
        int maxResults; 
        UniqueId operationId;
        Nullable startTime;

        [Fx.Tag.SynchronizationObject()] 
        object syncRoot;
 
        IOThreadTimer timer; 
        object userState;
 
        internal AsyncOperationContext(UniqueId operationId, int maxResults, TimeSpan duration, object userState)
        {
            Fx.Assert(operationId != null, "The operation id must be non null.");
            Fx.Assert(maxResults > 0, "The maxResults parameter must be positive."); 
            Fx.Assert(duration > TimeSpan.Zero, "The duration parameter must be positive.");
 
            this.maxResults = maxResults; 
            this.duration = duration;
            this.userState = userState; 
            this.operationId = operationId;
            this.syncRoot = new object();
        }
 
        public AsyncOperation AsyncOperation
        { 
            get 
            {
                return this.asyncOperation; 
            }
            set
            {
                this.asyncOperation = value; 
            }
        } 
 
        public TimeSpan Duration
        { 
            get
            {
                return this.duration;
            } 
        }
 
        public bool IsCompleted 
        {
            get 
            {
                return this.isCompleted;
            }
        } 

        public bool IsSyncOperation 
        { 
            get
            { 
                return (UserState is SyncOperationState);
            }
        }
 
        public int MaxResults
        { 
            get 
            {
                return this.maxResults; 
            }
        }

        public UniqueId OperationId 
        {
            get 
            { 
                return this.operationId;
            } 
        }

        public object SyncRoot
        { 
            get
            { 
                return syncRoot; 
            }
        } 

        public object UserState
        {
            get 
            {
                return this.userState; 
            } 
        }
 
        public Nullable StartedAt
        {
            get
            { 
                return this.startTime;
            } 
        } 

        public void Complete() 
        {
            this.StopTimer();
            this.isCompleted = true;
        } 

        public void StartTimer(Action waitCallback) 
        { 
            Fx.Assert(this.timer == null, "The timer object must be null.");
            Fx.Assert(this.isCompleted == false, "The timer cannot be started if the context is closed."); 

            this.startTime = DateTime.UtcNow;
            this.timer = new IOThreadTimer(waitCallback, this, false);
            this.timer.Set(this.Duration); 
        }
 
        void StopTimer() 
        {
            if (this.timer != null) 
            {
                this.timer.Cancel();
                this.timer = null;
            } 
        }
    } 
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK