У меня есть метод async внутри переносимой библиотеки классов с этой сигнатурой:
private async Task<T> _Fetch<T>(Uri uri)
Он извлекает ресурс, который отбрасывается как конкретный тип T.
Я работаю с библиотекой сторонних кешей (Akavache), которая требует Func<T> как одного из параметров и имеет попытался сделать это следующим образом:
await this.CacheProvider.GetOrCreateObject<T>(key,
async () => await _Fetch<T>(uri), cacheExpiry);
Это приводит к ошибке:
Невозможно преобразовать выражение async lambda для делегирования типа '
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);
который блокирует мое приложение.
Любые указатели на то, где я сбиваюсь с пути?