Запуск и извлечение результатов задач параллельно на основе параметра запросаC#

Место общения программистов C#
Ответить
Anonymous
 Запуск и извлечение результатов задач параллельно на основе параметра запроса

Сообщение 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;
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... uery-param
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»