Измените последовательный код на параллельное выполнение C#C#

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

Сообщение Anonymous »

Я наткнулся на фрагмент кода, в котором похоже, что задачи запускаются параллельно, но меня смущает то, что Foreach выполняетexpandOption последовательно.

Код: Выделить всё

public async Task GetMyApp(Request Request, ODataQueryOptions? options = null)
{
MyResponse response = await ApiClient.GetData(Id, Name);
// some business logic
List expandOperators = new List();
expandOptions?
.ToList()
.ForEach(item =>
{
if (item.PathToNavigationProperty.FirstSegment.Identifier.Equals(AAEConstants.ODataConstants.ODataExpandDeployedTo, StringComparison.CurrentCultureIgnoreCase))
{
expandOperators.Add(FetchDeployInfo(response));
}
else if (item.PathToNavigationProperty.FirstSegment.Identifier.Equals(AAEConstants.ODataConstants.ODataExpandAvailableTo, StringComparison.CurrentCultureIgnoreCase))
{
expandOperators.Add(FetchAvailableInfo(response));
}
});

// make sure all the expand operations are done before returning
await Task.WhenAll(expandOperators);
}
Здесь, в приведенном выше коде, похоже, что код выполняет итерацию по каждому переданному параметру ODataParam и добавляет задачу для получения этой информации из API.
Для полноты картины.

Код: Выделить всё

private async Task FetchDeployInfo(Response response)
{
Result deployedTores = await ApiClient.GetPolicyAsync(response.TitleId);
DeployedResponse deployedTo = deployedTores.ExtractDeployTo();
response.DeployedTo = deployedTo;
}

private async Task FetchAvailableInfo(Response response)
{
Result avlblTo = await ApiClient.GetPolicyAvlblAsync(response.TitleId);
AvlblResponse avlblTo = avlblTores .ExtractAVlblTo();
response.AvailableTo= avlblTo ;
}
Как я могу изменить это, чтобы запускать все ApiClient.GetData, FetchDeployInfo и FetchAvailableInfo параллельно?

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

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

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

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

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

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