gpt4 book ai didi

c# - 异步 lambda 并且不能将 Task.Task.List 隐式转换为 List
转载 作者:太空狗 更新时间:2023-10-29 22:37:04 25 4
gpt4 key购买 nike

我有以下类(class)

public PhoneModel
{
int PhoneID;
string PhoneType;
string PhoneNumber;
}
public ContactModel
{
int ContactID;
string FirstName;
string LastName;
List<PhoneModel> PhoneNumber;
}

我需要显示一个联系人列表,其中包含每个联系人的所有电话号码。

var contactList = await ContactBLL.GetContactList();
IEnumerable<ContactViewModel> contacts = contactList.ToList().ConvertAll(
async c => new ContactViewModel
{
phones = (await ContactBLL.GetContactPhones(c.ContactID)).ToList(),
firstName = c.FirstName,
lastName = c.LastName
});

我目前收到编译错误“无法将类型‘System.Threading.Tasks.Task.List 隐式转换为 IEnumerable...”。但是,如果没有 async 调用来获取电话列表,它会工作(当然没有电话)。我可以将 async 函数 GetContactPhones() 更改为同步函数,它将按预期工作。我的问题是有没有办法让上面的代码与 async 调用一起工作?

谢谢。

最佳答案

目前,您正在将项目序列投影到一组任务中,这些任务完成后可以提供您的 View 模型。如果您想获得这些 View 的序列,则需要(异步地)等到这些任务全部完成。您可以使用 Task.WhenAll 来执行此操作:

var contacts = await Task.WhenAll(contactList.Select(
async c => new ContactViewModel
{
phones = (await ContactBLL.GetContactPhones(c.ContactID)).ToList(),
firstName = c.FirstName,
lastName = c.LastName
}));

关于c# - 异步 lambda 并且不能将 Task.Task.List<Object> 隐式转换为 List<Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659903/

25 4 0