256
|
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 } |