我有一個便攜式類庫中的異步方法與此簽名:將異步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' –