view Implab/Components/RunnableComponent.cs @ 250:9f63dade3a40 v3

Working on runnable component
author cin
date Thu, 01 Feb 2018 02:43:35 +0300
parents
children 7c7e9ad6fe4a
line wrap: on
line source

using System;
using System.Threading;
using System.Threading.Tasks;

namespace Implab.Components
{
    public class RunnableComponent : IRunnable {

        readonly object m_lock = new object();

        CancellationTokenSource m_cts;

        public Task<ExecutionState> Completion {
            get;
            private set;
        }

        public ExecutionState State => throw new NotImplementedException();

        public Exception LastError => throw new NotImplementedException();

        public event EventHandler<StateChangeEventArgs> StateChanged;

        public void Dispose() {
            lock(m_lock) {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
        }

        protected virtual void Dispose(bool disposing) {
            if (disposing) {
                Safe.Dispose(m_cts);
            }
        }

        public void Start(CancellationToken ct) {
            lock(m_lock) {
                switch (State)
                {
                    
                    default:
                        throw new InvalidOperationException();
                }
            }
        }

        public void Stop(CancellationToken ct) {
            throw new NotImplementedException();
        }

        protected virtual Task StartImpl(CancellationToken ct) {

            return Task.CompletedTask;
        }
    }
}