##// END OF EJS Templates
Implab.Diagnostics drafts
Implab.Diagnostics drafts

File last commit:

r251:7c7e9ad6fe4a v3
r253:34df34841225 v3.0.1-beta v3
Show More
IRunnable.cs
59 lines | 2.0 KiB | text/x-csharp | CSharpLexer
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(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(CancellationToken ct);
/// <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; }
}
}