我有一个便携式类库中的异步方法与此签名:将异步lambda表达式转换为委托类型System.Func <T>?
private async Task<T> _Fetch<T>(Uri uri)
它获取被转换回为一个具体类型T.
我与第三方缓存工作的资源库(Akavache),需要一个Func<T>
作为参数之一,曾尝试在这种方式这样做:
await this.CacheProvider.GetOrCreateObject<T>(key,
async() => await _Fetch<T>(uri), cacheExpiry);
这导致错误:
Cannot convert async lambda expression to delegate type '
System.Func<T>
'. An async lambda expression may returnvoid
,Task
orTask<T>
, none of which are convertible to 'System.Func<T>
'.
我试过Func<T>
分配的各种排列没有任何的运气,我可以得到代码工作的唯一方法是使Func<T>
阻塞:
await this.CacheProvider.GetOrCreateObject<T>(key,
() => _Fetch<T>(uri).Result, cacheExpiry);
这会造成死锁我的应用程序。
任何指向哪里我会误入歧途?
你在找'Func' –