Skip to content

Commit 951d538

Browse files
authored
Merge pull request #1 from sfaqer/feature/longRunning
Длительные обещания
2 parents be94e2e + b9f4f45 commit 951d538

File tree

5 files changed

+27
-16
lines changed

5 files changed

+27
-16
lines changed

packagedef

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Описание.Имя("async")
2-
.Версия("0.2.1")
2+
.Версия("0.3.0")
33
.Автор("Кирилл Черненко")
44
.АдресАвтора("https://github.com/sfaqer")
55
.Описание("Фреймворк асинхронного исполнения для OneScript")

src/internal/Классы/КонтекстВыполненияОбещания.os

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
Перем Параметры; // Параметры алгоритма
55
Перем Предыдущий; // Предыдущее обещание результат которого передаётся как параметр в алгоритм
66
Перем ПерехватчикИсключения; // Это обещание перехватчик исключения
7+
Перем Длительное; // Это длительное обещание
78

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

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

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

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

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

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

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

47+
Функция Длительное() Экспорт
48+
Возврат Длительное;
49+
КонецФункции
50+
4551
#КонецОбласти

src/internal/Классы/Обещание.os

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
ИначеЕсли Не Дождались Тогда
3030
ВызватьИсключение "Превышено время ожидания получения результата";
3131
Иначе
32-
ВызватьИсключение ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке);
32+
ВызватьИсключение Задание.ИнформацияОбОшибке;
3333
КонецЕсли;
3434

3535
КонецФункции
@@ -56,7 +56,7 @@
5656

5757
КонецЕсли;
5858

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

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

@@ -86,7 +86,7 @@
8686

8787
КонецЕсли;
8888

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

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

@@ -113,12 +113,13 @@
113113

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

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

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

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

src/internal/Модули/ОбещанияСлужебный.os

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
Параметры = Новый Массив;
1414
Параметры.Добавить(Обещание);
1515

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

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

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

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

6264
КонецЕсли;
6365

src/Модули/Обещания.os

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,21 @@
66
// Выполняет асинхронно переданную лямбду
77
//
88
// Параметры:
9-
// Алгоритм - Строка - Лямбда выражение которое требуется исполнить
10-
// Объект - Сценарий - Объект который необходимо захватить в лямбду
11-
// Параметры - Массив из Произвольный - Параметры алгоритма
9+
// Алгоритм - Строка - Лямбда выражение которое требуется исполнить
10+
// Объект - Сценарий - Объект который необходимо захватить в лямбду
11+
// Параметры - Массив из Произвольный - Параметры алгоритма
12+
// Длительное - Булево - Длительное задание для которого нужно выделить отдельный поток
1213
//
1314
// Возвращаемое значение:
1415
// Обещание - Обещание о выполнении переданного алгоритма
1516
//
16-
Функция ВыполнитьЛямбду(Знач Алгоритм, Объект, Параметры) Экспорт
17+
Функция ВыполнитьЛямбду(Знач Алгоритм, Объект, Параметры, Длительное = Ложь) Экспорт
1718

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

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

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

@@ -32,13 +33,14 @@
3233
// Параметры:
3334
// Действие - Действие - Делегат на метод который требуется исполнить
3435
// Параметры - Массив из Произвольный - Параметры метода
36+
// Длительное - Булево - Длительное задание для которого нужно выделить отдельный поток
3537
//
3638
// Возвращаемое значение:
3739
// Обещание - Обещание о выполнении переданного метода
3840
//
39-
Функция ВыполнитьДелегат(Действие, Параметры) Экспорт
41+
Функция ВыполнитьДелегат(Действие, Параметры, Длительное = Ложь) Экспорт
4042

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

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

0 commit comments

Comments
 (0)