Mercurial > pub > ImplabNet
diff Implab/Components/IRunnable.cs @ 251:7c7e9ad6fe4a v3
Prerelease version of RunnableComponent
Added draft messaging interfaces
Added more more helpers to Xml/SerializationHelpers
author | cin |
---|---|
date | Sun, 11 Feb 2018 00:49:51 +0300 |
parents | 9f63dade3a40 |
children | c52691faaf21 |
line wrap: on
line diff
--- a/Implab/Components/IRunnable.cs Thu Feb 01 02:43:35 2018 +0300 +++ b/Implab/Components/IRunnable.cs Sun Feb 11 00:49:51 2018 +0300 @@ -6,23 +6,53 @@ /// <summary> /// Interface for the component which performs a long running task. /// </summary> - public interface IRunnable : IDisposable { + /// <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(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. + /// 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(CancellationToken ct); - Task<ExecutionState> Completion { get; } + /// <summary> + /// The result of the last started operation. This property reflects + /// only the result of the last started operation and therefore should + /// change only if a new operation is initiated. + /// </summary> + Task Completion { get; } + /// <summary> + /// Current state of the componenet + /// </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; } } }