Ich habe den folgenden Code, Elemente zwischen den Typen R
und L
Umwandlung einer Asynchron-Methode:Aufruf asynchrone Methode in IEnumerable.Select
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);
}
Ist dies möglich mit einem IEnumerable.Select Anruf (oder ähnliches zu schreiben) um Codezeilen zu reduzieren? Ich versuchte dies:
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
...
}
}
aber ich bekomme Fehler:
"Cannot convert async lambda expression to delegate type
'System.Func<R,int,L>'
. An async lambda expression may returnvoid
,Task
orTask<T>
, none of which are convertible to'System.Func<R,int,L>'
."
Ich glaube, dass ich etwas über das async bin fehlt/erwarten Keywords, aber ich kann nicht herausfinden, was passiert. Weiß jemand, wie ich meinen Code ändern kann, damit er funktioniert?
funktionieren sollte, versuchen nicht die Typparameter angeben? –
@ofstream: Nein, es sollte nicht funktionieren. Die Fehlermeldung ist ziemlich spezifisch. –
Wenn ich keine Typparameter spezifiziere ('remoteItems.Select (async r => erwarte MapToLocalObject (r)). ToList()') Ich bekomme eine 'Liste >>' das ist nicht was ich will. –
PKeno