У меня есть метод, который запускает другой частный метод foreach
Вот основной метод
public async Task<IList<IssueResponse>> GetIssuesAsync(string query, string email)
{
var fields =
$@"key,summary,description,status,issuetype,updated,created,attachment,assignee,reporter,
{IssueFields.RequestType}, {IssueFields.ApproversField},
{IssueFields.MinimumNotificationsReportersField}, {IssueFields.MinimumNotificationsUsersField},
{IssueFields.StandardNotificationsReportersField}, {IssueFields.StandardNotificationsUsersField}, {IssueFields.StandardNotificationsAssigneeField},
{IssueFields.FullNotificationsReportersField}, {IssueFields.FullNotificationsUsersField}, {IssueFields.FullNotificationsAssigneeField}";
var expand = "renderedFields";
var queryParams = new Dictionary<string, string>
{
{ "jql", query },
{ "maxResults", "100" },
{ "validateQuery", "false" },
{ "fields", fields },
{ "expand", expand }
};
var request = this.ConfigureGetRequest("search", queryParams: queryParams);
var result = await this.SendRequestAsync<IssueListResponse>(request);
var issues = result.IssueList;
foreach (var item in issues)
{
item.Fields.Attachment = await GetAttachments(item.Key, email);
}
return issues;
}
Как вы видите в foreach, у меня есть вызов другого метода.
Вот это код
private async Task<List<IssueAttachment>> GetAttachments(string issueKey, string email)
{
var attachmentRequest = this.ConfigureGetRequest(issueKey, this.settings.GetAttachmentsPathUrl).AddXClientHeader(email);;
return await this.SendRequestAsync<List<IssueAttachment>>(
attachmentRequest,
new List<HttpStatusCode> { HttpStatusCode.OK });
}
Как я могу использовать Task.WhenAll, чтобы параллельно получить привязанность?





Для начала вам просто нужны задачи в перечислении или коллекции:
var tks = issues.Select(i => GetAttachment(i.Key, email);
await Task.WhenAll(tks)
Но это не отражает результатов. Обратите внимание, что возвращаемый тип Task.WhenAll<TResult>(IEnumerable<Task<TResult>) — Task<TResult[]>, поэтому предполагается, что перечисление issues стабильно:
var tks = issues.Select(i => GetAttachment(i.Key, email).ToArray();
var results = await Task.WhenAll(tks);
foreach (var (res, issue) in results.Zip(issues, (t, i) => (t, i))) {
issue.Fields.Attachment = res;
}