Mercurial > pub > ImplabNet
comparison 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 |
comparison
equal
deleted
inserted
replaced
255:b00441e04738 | 256:c52691faaf21 |
---|---|
1 using System; | |
2 using System.Threading.Tasks; | |
3 | |
4 namespace Implab.Components { | |
5 /// <summary> | |
6 /// An interface for asynchronous components. | |
7 /// </summary> | |
8 /// <remarks> | |
9 /// <para> | |
10 /// Асинхронные компоненты не предназначены для одновременного использования несколькими клиентами, | |
11 /// однако существуют внутренние процессы, изменяющее состояние компонент без участия клиента. | |
12 /// Данный интерфейс определяет протокол взаимодействия с компонентой, при которм компоненте | |
13 /// посылаются сигналы от клиента, в ответ на которые компонента меняет свойство <see cref="Completion"/>, | |
14 /// данное свойство содержит в себе новую задачу, выполняемую компонентой и данное свойство | |
15 /// может измениться только при получении нового сигнала от клиента. | |
16 /// </para> | |
17 /// <para> | |
18 /// В дополнение к <see cref="Completion"/> компонента может определять другие свойства, в | |
19 /// которых будет передаваться информация о результате выполнения операции. | |
20 /// </para> | |
21 /// <para> | |
22 /// Особое внимание следует уделить реализации <see cref="IDisposable"/>, который по своей природе | |
23 /// синхронный, данное правило безусловно можно нарушить, но тогда могут возникнуть проблемы с | |
24 /// тем, что ресурсы еще не освободились, а ход программы продолжается, что приведет к ошибкам, | |
25 /// например при попытке получить ресуср другим объектом, либо при заврешении программы. | |
26 /// </para> | |
27 /// <seealso href="https://blog.stephencleary.com/2013/01/async-oop-0-introduction.html"/> | |
28 /// </remarks> | |
29 public interface IAsyncComponent { | |
30 /// <summary> | |
31 /// The result of the last started operation. This property reflects | |
32 /// only the result of the last started operation and therefore should | |
33 /// change only if a new operation is initiated. | |
34 /// </summary> | |
35 Task Completion { get; } | |
36 } | |
37 } |