gpt4 book ai didi

c# - async/await WhenAll 在两个具有相同返回类型的方法上

转载 作者:行者123 更新时间:2023-11-30 13:55:54 26 4
gpt4 key购买 nike

我正在尝试将文件异步上传到 S3 存储桶。我能够使用以下代码成功地做到这一点。

我似乎无法弄清楚的是如何同时处理具有相同返回类型的两个不同方法。

UploadImagesUploadAttachments 都返回 EntityUploadResultIEnumerable。如何并行执行它们并在它们都完成后返回结果?

public async Task<List<EntityUploadResult>> BulkUploadFiles(IEnumerable<BulkUploadFile> files)
{
var results = new List<EntityUploadResult>();

var images = UploadImages(files.Where(x => x.FileType == BulkFileType.Image).AsEnumerable());
var attachments = UploadAttachments(files.Where(x => x.FileType == BulkFileType.Attachment).AsEnumerable());

results.AddRange(await images);
results.AddRange(await attachments);

return results;
}

private async Task<IEnumerable<EntityUploadResult>> UploadImages(IEnumerable<BulkUploadFile> files)
{
return await Task.WhenAll(files.Select(i => UploadImage(i)));
}

private async Task<IEnumerable<EntityUploadResult>> UploadAttachments(IEnumerable<BulkUploadFile> files)
{
return await Task.WhenAll(files.Select(i => UploadAttachment(i)));
}

最佳答案

首先,这就是您已经在做的事情,即启动两个操作然后才等待它们。

但是,如果你想用 Task.WhenAll 做到这一点,并且只等待一次,你可以使用返回值,它是所有操作返回值的集合,并将它们与 选择多个

public async Task<List<EntityUploadResult>> BulkUploadFiles(IEnumerable<BulkUploadFile> files)
{
var images = UploadImages(files.Where(x => x.FileType == BulkFileType.Image).AsEnumerable());
var attachments = UploadAttachments(files.Where(x => x.FileType == BulkFileType.Attachment).AsEnumerable());

var results = await Task.WhenAll(images, attachments);
return results.SelectMany(_ => _).ToList();
}

关于c# - async/await WhenAll 在两个具有相同返回类型的方法上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31256026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com