Mercurial > pub > ImplabNet
view Implab/Components/IRunnable.cs @ 281:e0916ddc9950 v3 tip
code cleanup and refactoring
author | cin |
---|---|
date | Fri, 01 Jun 2018 21:35:24 +0300 |
parents | f1696cdc3d7a |
children |
line wrap: on
line source
using System; using System.Threading; using System.Threading.Tasks; namespace Implab.Components { /// <summary> /// Interface for the component which performs a long running task. /// </summary> /// <remarks> /// The access to the runnable component should be sequential, the /// componet should support asynchronous completion of the initiated /// operation but operations itself must be initiated sequentially. /// </remarks> public interface IRunnable { /// <summary> /// Starts this instance /// </summary> /// <remarks> /// This operation is cancellable and it's expected to move to /// the failed state or just ignore the cancellation request, /// </remarks> void Start(); void Start(CancellationToken ct); /// <summary> /// Stops this instance and releases all resources, after the /// instance is stopped it is moved to Disposed state and /// can't be reused. /// </summary> /// <remarks> /// If the componet was in the starting state the pending operation /// will be requested to cancel. The stop operatin will be /// performed only if the component in the running state. /// </remarks> void Stop(); void Stop(CancellationToken ct); /// <summary> /// Current state of the componenet, dynamically reflects the current state. /// </summary> ExecutionState State { get; } /// <summary> /// Event to monitor the state of the component. /// </summary> event EventHandler<StateChangeEventArgs> StateChanged; /// <summary> /// The last error /// </summary> Exception LastError { get; } } }