MultiAsyncResult.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Net / System / Net / Mail / MultiAsyncResult.cs / 1 / MultiAsyncResult.cs

                            namespace System.Net.Mime 
{
    using System;

    internal class MultiAsyncResult : LazyAsyncResult 
    {
        int outstanding; 
        object context; 

        internal MultiAsyncResult(object context, AsyncCallback callback, object state) : base(context,state,callback) 
        {
            this.context = context;
        }
 
        internal object Context
        { 
            get 
            {
                return this.context; 
            }
        }

        internal void Enter() 
        {
            Increment(); 
        } 

        internal void Leave() 
        {
            Decrement();
        }
 
        internal void Leave(object result)
        { 
            this.Result = result; 
            Decrement();
        } 

        void Decrement()
        {
            if (System.Threading.Interlocked.Decrement(ref this.outstanding) == -1) 
            {
                base.InvokeCallback(Result); 
            } 
        }
 
        void Increment()
        {
            System.Threading.Interlocked.Increment(ref this.outstanding);
        } 

        internal void CompleteSequence() 
        { 
            Decrement();
        } 

        internal static object End(IAsyncResult result)
        {
            MultiAsyncResult thisPtr = (MultiAsyncResult)result; 
            thisPtr.InternalWaitForCompletion();
            return thisPtr.Result; 
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
namespace System.Net.Mime 
{
    using System;

    internal class MultiAsyncResult : LazyAsyncResult 
    {
        int outstanding; 
        object context; 

        internal MultiAsyncResult(object context, AsyncCallback callback, object state) : base(context,state,callback) 
        {
            this.context = context;
        }
 
        internal object Context
        { 
            get 
            {
                return this.context; 
            }
        }

        internal void Enter() 
        {
            Increment(); 
        } 

        internal void Leave() 
        {
            Decrement();
        }
 
        internal void Leave(object result)
        { 
            this.Result = result; 
            Decrement();
        } 

        void Decrement()
        {
            if (System.Threading.Interlocked.Decrement(ref this.outstanding) == -1) 
            {
                base.InvokeCallback(Result); 
            } 
        }
 
        void Increment()
        {
            System.Threading.Interlocked.Increment(ref this.outstanding);
        } 

        internal void CompleteSequence() 
        { 
            Decrement();
        } 

        internal static object End(IAsyncResult result)
        {
            MultiAsyncResult thisPtr = (MultiAsyncResult)result; 
            thisPtr.InternalWaitForCompletion();
            return thisPtr.Result; 
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

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