У меня есть асинхронный метод внутри переносимой библиотеки классов с этой подписью:
private async Task<T> _Fetch<T>(Uri uri)
Он извлекает ресурс, который возвращается как конкретный тип T.
Я работаю со сторонней библиотекой кеша (Akavache), которая требует Func<T>
в качестве одного из параметров и пытался сделать это таким образом:
await this.CacheProvider.GetOrCreateObject<T>(key,
async () => await _Fetch<T>(uri), cacheExpiry);
Это приводит к ошибке:
Не удается преобразовать асинхронное лямбда-выражение в тип делегата "
System.Func<T>
". Асинхронное лямбда-выражение может возвращатьvoid
,Task
илиTask<T>
, ни одно из которых не может быть преобразовано в 'System.Func<T>
'.
Я безуспешно пробовал различные перестановки присваивания Func<T>
, единственный способ заставить код работать - это блокировать Func<T>
:
await this.CacheProvider.GetOrCreateObject<T>(key,
() => _Fetch<T>(uri).Result, cacheExpiry);
который блокирует мое приложение.
Любые указатели на то, где я сбиваюсь с пути?
Func<T, Task>
- person Jerry Nixon   schedule 08.03.2016