Skip to content

Commit

Permalink
Merge pull request #1 from sfaqer/feature/longRunning
Browse files Browse the repository at this point in the history
Длительные обещания
  • Loading branch information
sfaqer authored Jan 10, 2025
2 parents be94e2e + b9f4f45 commit 951d538
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 16 deletions.
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Описание.Имя("async")
.Версия("0.2.1")
.Версия("0.3.0")
.Автор("Кирилл Черненко")
.АдресАвтора("https://github.com/sfaqer")
.Описание("Фреймворк асинхронного исполнения для OneScript")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@
Перем Параметры; // Параметры алгоритма
Перем Предыдущий; // Предыдущее обещание результат которого передаётся как параметр в алгоритм
Перем ПерехватчикИсключения; // Это обещание перехватчик исключения
Перем Длительное; // Это длительное обещание

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ПриСозданииОбъекта(пАлгоритм, пПараметры, пПерехватчикИсключения)
Процедура ПриСозданииОбъекта(пАлгоритм, пПараметры, пПерехватчикИсключения, пДлительное)

Если ТипЗнч(пПараметры) = Тип("Обещание") Тогда
Предыдущий = пПараметры;
Expand All @@ -19,6 +20,7 @@

Алгоритм = пАлгоритм;
ПерехватчикИсключения = пПерехватчикИсключения;
Длительное = пДлительное;

КонецПроцедуры

Expand All @@ -42,4 +44,8 @@
Возврат ПерехватчикИсключения;
КонецФункции

Функция Длительное() Экспорт
Возврат Длительное;
КонецФункции

#КонецОбласти
11 changes: 6 additions & 5 deletions src/internal/Классы/Обещание.os
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
ИначеЕсли Не Дождались Тогда
ВызватьИсключение "Превышено время ожидания получения результата";
Иначе
ВызватьИсключение ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке);
ВызватьИсключение Задание.ИнформацияОбОшибке;
КонецЕсли;

КонецФункции
Expand All @@ -56,7 +56,7 @@

КонецЕсли;

Результат = Новый Обещание(Алгоритм, ЭтотОбъект);
Результат = Новый Обещание(Алгоритм, ЭтотОбъект, , КонтекстВыполнения.Длительное());

ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат);

Expand Down Expand Up @@ -86,7 +86,7 @@

КонецЕсли;

Результат = Новый Обещание(Алгоритм, ЭтотОбъект, Истина);
Результат = Новый Обещание(Алгоритм, ЭтотОбъект, Истина, КонтекстВыполнения.Длительное());

ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат);

Expand All @@ -113,12 +113,13 @@

#Область СлужебныеПроцедурыИФункции

Процедура ПриСозданииОбъекта(Алгоритм, Параметры, ПерехватчикИсключения = Ложь)
Процедура ПриСозданииОбъекта(Алгоритм, Параметры, ПерехватчикИсключения = Ложь, Длительное = Ложь)

КонтекстВыполнения = Новый КонтекстВыполненияОбещания(
Алгоритм,
Параметры,
ПерехватчикИсключения
ПерехватчикИсключения,
Длительное
);

КонецПроцедуры
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
Параметры = Новый Массив;
Параметры.Добавить(Обещание);

Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ВыполнитьОбещание", Параметры);
Длительное = Рефлектор.ПолучитьСвойство(Обещание, "КонтекстВыполнения").Длительное();

Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ВыполнитьОбещание", Параметры, Длительное);

Рефлектор.УстановитьСвойство(Обещание, "Задание", Задание);

Expand Down Expand Up @@ -57,7 +59,7 @@
СтрокаПараметров.Добавить(СтрШаблон("Параметры[%1]", Счетчик));
КонецЦикла;

Возврат Вычислить(СтрШаблон("Контекст.Алгоритм().Выполнить(%1)", СтрСоединить(СтрокаПараметров, ",")));
Возврат Рефлектор.ВызватьМетод(Контекст.Алгоритм(), "Выполнить", Параметры);

КонецЕсли;

Expand Down
16 changes: 9 additions & 7 deletions src/Модули/Обещания.os
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,21 @@
// Выполняет асинхронно переданную лямбду
//
// Параметры:
// Алгоритм - Строка - Лямбда выражение которое требуется исполнить
// Объект - Сценарий - Объект который необходимо захватить в лямбду
// Параметры - Массив из Произвольный - Параметры алгоритма
// Алгоритм - Строка - Лямбда выражение которое требуется исполнить
// Объект - Сценарий - Объект который необходимо захватить в лямбду
// Параметры - Массив из Произвольный - Параметры алгоритма
// Длительное - Булево - Длительное задание для которого нужно выделить отдельный поток
//
// Возвращаемое значение:
// Обещание - Обещание о выполнении переданного алгоритма
//
Функция ВыполнитьЛямбду(Знач Алгоритм, Объект, Параметры) Экспорт
Функция ВыполнитьЛямбду(Знач Алгоритм, Объект, Параметры, Длительное = Ложь) Экспорт

Алгоритм = Лямбда.Выражение(Алгоритм)
.ЗахватитьОбъект(Объект)
.ВДействие();

Результат = Новый Обещание(Алгоритм, Параметры);
Результат = Новый Обещание(Алгоритм, Параметры, , Длительное);

ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат);

Expand All @@ -32,13 +33,14 @@
// Параметры:
// Действие - Действие - Делегат на метод который требуется исполнить
// Параметры - Массив из Произвольный - Параметры метода
// Длительное - Булево - Длительное задание для которого нужно выделить отдельный поток
//
// Возвращаемое значение:
// Обещание - Обещание о выполнении переданного метода
//
Функция ВыполнитьДелегат(Действие, Параметры) Экспорт
Функция ВыполнитьДелегат(Действие, Параметры, Длительное = Ложь) Экспорт

Результат = Новый Обещание(Действие, Параметры);
Результат = Новый Обещание(Действие, Параметры, , Длительное);

ОбещанияСлужебный.ЗапуститьВыполнениеОбещания(Результат);

Expand Down

0 comments on commit 951d538

Please sign in to comment.