Tôi có đoạn mã sau, chuyển đổi mục giữa các loại R
và L
sử dụng một phương pháp async:gọi method async trong 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);
}
phải là có thể này để viết sử dụng một cuộc gọi IEnumerable.Select (hoặc tương tự) để giảm dòng mã? Tôi cố gắng này:
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
...
}
}
Nhưng tôi nhận được lỗi:
"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>'
."
Tôi tin rằng tôi đang thiếu một cái gì đó về async/chờ đợi từ khóa, nhưng tôi không thể tìm ra những gì. Có cơ thể nào biết làm thế nào tôi có thể sửa đổi mã của tôi để làm cho nó hoạt động?
Nên hoạt động, hãy thử không chỉ định các thông số kiểu? –
@ofstream: Không, nó không hoạt động. Thông báo lỗi khá cụ thể về điều này. –
Nếu tôi không chỉ định các tham số kiểu ('remoteItems.Select (async r => đang đợi MapToLocalObject (r)). ToList()') Tôi nhận được một 'Danh sách >>' mà không phải là những gì tôi muốn. –
PKeno