У меня есть следующий код, который преобразует элементы между типами R
и L
с помощью метода async:
class MyClass<R,L> {
public async Task<bool> MyMethodAsync(List<R> remoteItems) {
...
List<L> mappedItems = new List<L>();
foreach (var remoteItem in remoteItems )
{
mappedItems.Add(await MapToLocalObject(remoteItem));
}
//Do stuff with mapped items
...
}
private async Task<L> MapToLocalObject(R remoteObject);
}
Можно ли написать с помощью вызова IEnumerable.Select(или аналогичного) для сокращения строк кода? Я пробовал это:
class MyClass<R,L> {
public async Task<bool> MyMethodAsync(List<R> remoteItems) {
...
List<L> mappedItems = remoteItems.Select<R, L>(async r => await MapToLocalObject(r)).ToList<L>();
//Do stuff with mapped items
...
}
}
Но я получаю ошибку:
"Невозможно преобразовать выражение async lambda в тип делегирования
'System.Func<R,int,L>'
. Асинхронное лямбда-выражение может возвращатьvoid
,Task
илиTask<T>
, ни одна из которых не может быть конвертирована в'System.Func<R,int,L>'
".
Я считаю, что я что-то пропустил по ключевым словам async/wait, но я не могу понять, что. Кто-нибудь знает, как я могу изменить свой код, чтобы он работал?