IRunnable.cs
54 lines
| 1.8 KiB
| text/x-csharp
|
CSharpLexer
|
|
r289 | 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; } | ||||
| } | ||||
| } | ||||
