view Implab/Components/IRunnable.cs @ 209:a867536c68fc v2

Bound promise to CancellationToken Added new states to ExecutionSate enum. Added Safe.Guard() method to handle cleanup of the result of the promise
author cin
date Wed, 16 Nov 2016 03:06:08 +0300
parents 7d07503621fe
children 9f63dade3a40
line wrap: on
line source

using System;

namespace Implab.Components {
    /// <summary>
    /// Interface for the component which performs a long running task.
    /// </summary>
    /// <remarks>
    /// <para>The component also should implement <see cref="IDisposable"/> interface to be able to release used resources.</para>
    /// <para>All methods of this interface must be a thread safe. If the operation is not applicable in the current state the
    /// method should throw an exception and keep the current state unchanged.</para>
    /// </remarks>
    public interface IRunnable : IDisposable {
        /// <summary>
        /// Starts this instance
        /// </summary>
        IPromise Start();

        /// <summary>
        /// Stops this instance, after the instance is stopped it can move to Failed, Ready or Disposed state, in case with the last it can't be reused.
        /// </summary>
        IPromise Stop();

        ExecutionState State { get; }

        event EventHandler<StateChangeEventArgs> StateChanged;

        Exception LastError { get; }
    }
}