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