using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Implab {
public interface IPromise: ICancellable {
///
/// Check whereather the promise has no more than one dependent promise.
///
bool IsExclusive {
get;
}
///
/// Тип результата, получаемого через данное обещание.
///
Type PromiseType { get; }
///
/// Обещание является выполненым, либо успешно, либо с ошибкой, либо отменено.
///
bool IsResolved { get; }
///
/// Обещание было отменено.
///
bool IsCancelled { get; }
IPromise Then(Action success, ErrorHandler error, Action cancel);
IPromise Then(Action success, ErrorHandler error);
IPromise Then(Action success);
IPromise Chain(Func chained, ErrorHandler error, Action cancel);
IPromise Chain(Func chained, ErrorHandler error);
IPromise Chain(Func chained);
///
/// Добавляет последнй обработчик в цепочку обещаний, не создает промежуточных обещаний.
///
/// Success.
/// Error.
/// Cancel.
void Last(Action success, ErrorHandler error, Action cancel);
void Last(Action success, ErrorHandler error);
void Last(Action success);
IPromise Error(ErrorHandler error);
///
/// Обрабатывает либо ошибку, либо результат. Событие отмены не обрабатывается.
///
/// Обработчик.
/// После обработке ошибки, она передается дальше.
///
/// Обрабатывает либо ошибку, либо результат, либо отмену обещания.
///
/// Обработчик.
/// После обработке ошибки, она передается дальше.
IPromise Anyway(Action handler);
///
/// Обработчик для регистрации отмены обещания, событие отмены не может быть подавлено.
///
/// Новое обещание, связанное с текущим.
/// Обработчик события.
/// Если обработчик вызывает исключение, то оно передается обработчику ошибки, результат работы
/// которого будет передан связанному обещанию
IPromise Cancelled(Action handler);
///
/// Преобразует результат обещания к заданному типу и возвращает новое обещание.
///
IPromise Cast();
///
/// Синхронизирует текущий поток с обещанием.
///
void Join();
///
/// Синхронизирует текущий поток с обещанием.
///
/// Время ожидания, по его истечению возникнет исключение.
/// Превышено время ожидания.
void Join(int timeout);
}
}