TrackingParticipant.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.Activities / System / Activities / Tracking / TrackingParticipant.cs / 1305376 / TrackingParticipant.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------

namespace System.Activities.Tracking 
{
    using System; 
    using System.Runtime; 

    public abstract class TrackingParticipant 
    {
        protected TrackingParticipant()
        {
        } 

        public virtual TrackingProfile TrackingProfile 
        { 
            get;
            set; 
        }

        [Fx.Tag.InheritThrows(From="Track", FromDeclaringType=typeof(TrackingParticipant))]
        protected internal virtual IAsyncResult BeginTrack(TrackingRecord record, TimeSpan timeout, AsyncCallback callback, object state) 
        {
            return new TrackAsyncResult(this, record, timeout, callback, state); 
        } 

        [Fx.Tag.InheritThrows(From = "Track", FromDeclaringType = typeof(TrackingParticipant))] 
        protected internal virtual void EndTrack(IAsyncResult result)
        {
            TrackAsyncResult.End(result);
        } 

        [Fx.Tag.Throws(typeof(Exception), "extensibility point")] 
        [Fx.Tag.Throws.Timeout("Tracking data could not be saved before the timeout")] 
        protected internal abstract void Track(TrackingRecord record, TimeSpan timeout);
 
        class TrackAsyncResult : AsyncResult
        {
            static Action asyncExecuteTrack = new Action(ExecuteTrack);
            TrackingParticipant participant; 
            TrackingRecord record;
            TimeSpan timeout; 
 
            public TrackAsyncResult(TrackingParticipant participant, TrackingRecord record, TimeSpan timeout, AsyncCallback callback, object state)
                : base(callback, state) 
            {
                this.participant = participant;
                this.record = record;
                this.timeout = timeout; 
                ActionItem.Schedule(asyncExecuteTrack, this);
            } 
 
            public static void End(IAsyncResult result)
            { 
                AsyncResult.End(result);
            }

            static void ExecuteTrack(object state) 
            {
                TrackAsyncResult thisPtr = (TrackAsyncResult)state; 
                thisPtr.TrackCore(); 
            }
 
            void TrackCore()
            {
                Exception participantException = null;
                try 
                {
                    this.participant.Track(this.record, this.timeout); 
                } 
                catch (Exception exception)
                { 
                    if (Fx.IsFatal(exception))
                    {
                        throw;
                    } 

                    participantException = exception; 
                } 
                base.Complete(false, participantException);
            } 
        }

    }
} 

// 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