У меня есть 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