Асинхронное программирование в 1С через .Net Native ВК
5 мин
Это продолжение статьи Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux II
В .Net сейчас во многих классах есть асинхронные методы. В 1С их можно применять например так
И напомню про синонимы из предыдущей статьи/ Так добавив синоним
Я могу использовать все на русском
Но можно использовать асинхронные методы так.
Это конечно не совсем асинхронное программирование, но все же лучше чем отдельно для каждого запроса вызывать синхронный метод.
В .Net сейчас во многих классах есть асинхронные методы. В 1С их можно применять например так
Стр=ъ(Клиент.GetStringAsync(uriSources)).Result;
И напомню про синонимы из предыдущей статьи/ Так добавив синоним
Врап.ДобавитьСиноним(HTTPClient.ПолучитьСсылку(),"ПолучитьСтроку","GetStringAsync");
Врап.ДобавитьСиноним(Task.ПолучитьСсылку(),"Результат","Result");
Я могу использовать все на русском
Стр=ъ(Клиент.ПолучитьСтроку(адрес)).Результат;
Но можно использовать асинхронные методы так.
Клиент = ъ(Врап.Новый(HttpClient.ПолучитьСсылку(),handler.ПолучитьСсылку()));
лист=ъНовый("System.Collections.Generic.List`1[System.Threading.Tasks.Task]");
Для каждого стр из ПолучитьСписокURL() Цикл
Задача=ъ(Клиент.GetStringAsync(стр));
лист.Add(задача.ПолучитьСсылку());
КонецЦикла;
Task=ъТип("System.Threading.Tasks.Task");
Пока лист.Count>0 Цикл
массив=ъ(лист.ToArray());
индекс = Task.WaitAny(массив.ПолучитьСсылку());
Сообщить(индекс);
результат = ъ(лист.get_Item(индекс)).Result;
Сообщить(СтрДлина(результат));
лист.RemoveAt(индекс);
КонецЦикла;
Это конечно не совсем асинхронное программирование, но все же лучше чем отдельно для каждого запроса вызывать синхронный метод.