Mercurial > pub > ImplabNet
diff Implab/Components/IAsyncComponent.cs @ 256:c52691faaf21 v3
Removed obsolete App, ComponentContainer
Extracted IAsyncComponent interface
Working on RunnableComponent
author | cin |
---|---|
date | Wed, 11 Apr 2018 03:05:14 +0300 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Implab/Components/IAsyncComponent.cs Wed Apr 11 03:05:14 2018 +0300 @@ -0,0 +1,37 @@ +using System; +using System.Threading.Tasks; + +namespace Implab.Components { + /// <summary> + /// An interface for asynchronous components. + /// </summary> + /// <remarks> + /// <para> + /// Асинхронные компоненты не предназначены для одновременного использования несколькими клиентами, + /// однако существуют внутренние процессы, изменяющее состояние компонент без участия клиента. + /// Данный интерфейс определяет протокол взаимодействия с компонентой, при которм компоненте + /// посылаются сигналы от клиента, в ответ на которые компонента меняет свойство <see cref="Completion"/>, + /// данное свойство содержит в себе новую задачу, выполняемую компонентой и данное свойство + /// может измениться только при получении нового сигнала от клиента. + /// </para> + /// <para> + /// В дополнение к <see cref="Completion"/> компонента может определять другие свойства, в + /// которых будет передаваться информация о результате выполнения операции. + /// </para> + /// <para> + /// Особое внимание следует уделить реализации <see cref="IDisposable"/>, который по своей природе + /// синхронный, данное правило безусловно можно нарушить, но тогда могут возникнуть проблемы с + /// тем, что ресурсы еще не освободились, а ход программы продолжается, что приведет к ошибкам, + /// например при попытке получить ресуср другим объектом, либо при заврешении программы. + /// </para> + /// <seealso href="https://blog.stephencleary.com/2013/01/async-oop-0-introduction.html"/> + /// </remarks> + public interface IAsyncComponent { + /// <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; } + } +} \ No newline at end of file