Mercurial > pub > ImplabNet
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; } } }