У меня есть API, с помощью которого клиент может запросить дополнительные данные ресурса с параметром запроса как
https:///api/GetAppData?name=appname&getUsers=true&getversion=2.3
По указанному выше URL-адресу я получаю сведения о приложении по имени приложения, а также информацию о пользователях и конкретной версии приложения.
Однако, чтобы получить дополнительную информацию, мне нужно сделать еще два вызова (я знаю, что это плохо, но мы ограничены существующей инфраструктурой.)
Итак, я пытаюсь выполнить параллельную выборку к targetAPI с помощью приведенного ниже кода.
Task appDataTask= myClient.GetAppDataAsync(identifierId, identifierName, version, token);
Task getUsers= (users.HasValue && users.Value) ?
FetchUsers(titleId: appId, token: token) : null;
Task VersionTask= (version.HasValue && version.Value) ?
FetchVersionApp(titleId: TitleId, token: token) : null;
await Task.WhenAll(appDataTask, getUsers, VersionTask);
AppData app = appDataTask.Result;
AppResponse response = app.ConvertData();
if (getUsers != null) // this means users is requested.
{
DeployedUsers users= getUsers?.Result;
response.Users= users;
}
if (VersionTask!= null) // this means AvailableTo is requested.
{
VersionedApp versionedApp= VersionTask?.Result;
response.version= versionedApp;
}
Как мне этого добиться? запуск этого кода вызовет исключение ArgumentException.
РЕДАКТИРОВАТЬ:
Я попробовал следующее.
bool? usersRequested = mosAppMetadataRequested?.Any(x => x.PathToNavigationProperty.FirstSegment.Identifier.Equals(AAEConstants.ODataConstants.ODataExpandDeployedTo, StringComparison.CurrentCultureIgnoreCase));
bool? isVersionRequested = mosAppMetadataRequested?.Any(x => x.PathToNavigationProperty.FirstSegment.Identifier.Equals(AAEConstants.ODataConstants.ODataExpandAvailableTo, StringComparison.CurrentCultureIgnoreCase));
List appTasks = new();
appTasks.Add(mosAdminApiClient.GetTitlePreviewAsync(identifierId, identifierName, version, token));
if (usersRequested.HasValue && usersRequested.Value)
{
appTasks.Add(GetDeployDataByTitleIdAsync(titleId: unifiedAppRequest.TitleId, token: token));
}
if (isVersionRequested.HasValue && isVersionRequested.Value)
{
appTasks.Add(GetAvailableToDataByTitleIdAsync(titleId: unifiedAppRequest.TitleId, token: token));
}
await Task.WhenAll(appTasks);
AppData mosApp = ((Task)appTasks[0]).Result;
UnifiedAppResponse response = mosApp.ConvertPreviewToUnifiedAppResponse();
if (usersRequested.HasValue && usersRequested.Value) // this means DeployedTo is requested.
{
Users mosAppDeployedTo = ((Task)appTasks[1])?.Result;
response.DeployedTo = mosAppDeployedTo;
}
if (isVersionRequested.HasValue && isVersionRequested.Value) // this means AvailableTo is requested.
{
VersionInfo mosAppAvailableTo = ((Task)appTasks[2])?.Result;
response.AvailableTo = mosAppAvailableTo;
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... uery-param
Запуск и извлечение результатов задач параллельно на основе параметра запроса ⇐ C#
Место общения программистов C#
1719586411
Anonymous
У меня есть API, с помощью которого клиент может запросить дополнительные данные ресурса с параметром запроса как
https:///api/GetAppData?name=appname&getUsers=true&getversion=2.3
По указанному выше URL-адресу я получаю сведения о приложении по имени приложения, а также информацию о пользователях и конкретной версии приложения.
Однако, чтобы получить дополнительную информацию, мне нужно сделать еще два вызова (я знаю, что это плохо, но мы ограничены существующей инфраструктурой.)
Итак, я пытаюсь выполнить параллельную выборку к targetAPI с помощью приведенного ниже кода.
Task appDataTask= myClient.GetAppDataAsync(identifierId, identifierName, version, token);
Task getUsers= (users.HasValue && users.Value) ?
FetchUsers(titleId: appId, token: token) : null;
Task VersionTask= (version.HasValue && version.Value) ?
FetchVersionApp(titleId: TitleId, token: token) : null;
await Task.WhenAll(appDataTask, getUsers, VersionTask);
AppData app = appDataTask.Result;
AppResponse response = app.ConvertData();
if (getUsers != null) // this means users is requested.
{
DeployedUsers users= getUsers?.Result;
response.Users= users;
}
if (VersionTask!= null) // this means AvailableTo is requested.
{
VersionedApp versionedApp= VersionTask?.Result;
response.version= versionedApp;
}
Как мне этого добиться? запуск этого кода вызовет исключение ArgumentException.
РЕДАКТИРОВАТЬ:
Я попробовал следующее.
bool? usersRequested = mosAppMetadataRequested?.Any(x => x.PathToNavigationProperty.FirstSegment.Identifier.Equals(AAEConstants.ODataConstants.ODataExpandDeployedTo, StringComparison.CurrentCultureIgnoreCase));
bool? isVersionRequested = mosAppMetadataRequested?.Any(x => x.PathToNavigationProperty.FirstSegment.Identifier.Equals(AAEConstants.ODataConstants.ODataExpandAvailableTo, StringComparison.CurrentCultureIgnoreCase));
List appTasks = new();
appTasks.Add(mosAdminApiClient.GetTitlePreviewAsync(identifierId, identifierName, version, token));
if (usersRequested.HasValue && usersRequested.Value)
{
appTasks.Add(GetDeployDataByTitleIdAsync(titleId: unifiedAppRequest.TitleId, token: token));
}
if (isVersionRequested.HasValue && isVersionRequested.Value)
{
appTasks.Add(GetAvailableToDataByTitleIdAsync(titleId: unifiedAppRequest.TitleId, token: token));
}
await Task.WhenAll(appTasks);
AppData mosApp = ((Task)appTasks[0]).Result;
UnifiedAppResponse response = mosApp.ConvertPreviewToUnifiedAppResponse();
if (usersRequested.HasValue && usersRequested.Value) // this means DeployedTo is requested.
{
Users mosAppDeployedTo = ((Task)appTasks[1])?.Result;
response.DeployedTo = mosAppDeployedTo;
}
if (isVersionRequested.HasValue && isVersionRequested.Value) // this means AvailableTo is requested.
{
VersionInfo mosAppAvailableTo = ((Task)appTasks[2])?.Result;
response.AvailableTo = mosAppAvailableTo;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78680087/run-extract-results-of-tasks-in-parallel-based-on-query-param[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия