У меня есть метод 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);
который блокирует мое приложение.
Любые указатели на то, где я сбиваюсь с пути?