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, Action error, Action cancel); IPromise Then(Action success, Action error); IPromise Then(Action success); IPromise Chain(Func chained, Func error, Action cancel); IPromise Chain(Func chained, Func error); IPromise Chain(Func chained); /// /// Добавляет последнй обработчик в цепочку обещаний, не создает промежуточных обещаний. /// /// Success. /// Error. /// Cancel. void Last(Action success, Action error, Action cancel); void Last(Action success, Action error); void Last(Action success); IPromise Error(Action error); /// /// Обрабатывает либо ошибку, либо результат, либо отмену. /// /// Обработчик. /// После обработке ошибки, она передается дальше. /// /// Обрабатывает либо ошибку, либо результат, либо отмену обещания. /// /// Обработчик. /// После обработке ошибки, она передается дальше. IPromise Anyway(Action handler); /// /// Обработчик для регистрации отмены обещания. /// /// Новое обещание, связанное с текущим, выполнится после указанного обработчика. /// Обработчик события. /// Если обработчик вызывает исключение, то оно передается обработчику ошибки, результат работы /// которого будет передан связанному обещанию IPromise Cancelled(Action handler); /// /// Преобразует результат обещания к заданному типу и возвращает новое обещание. /// IPromise Cast(); /// /// Синхронизирует текущий поток с обещанием. /// void Join(); /// /// Синхронизирует текущий поток с обещанием. /// /// Время ожидания, по его истечению возникнет исключение. /// Превышено время ожидания. void Join(int timeout); } }