##// END OF EJS Templates
addded ServiceHost tests, updated project targets
addded ServiceHost tests, updated project targets

File last commit:

r289:95896f882995 v3.0.14 v3
r299:d54174bbd6c4 tip default
Show More
IRunnable.cs
54 lines | 1.8 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();
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; }
}
}