首页 新闻 搜索 专区 学院

C#中如何让Func可以await

0
悬赏园豆:50 [已解决问题] 解决于 2018-03-05 14:25

下面的 C# 代码

public async Task<T> GetValueOrCreateAsync<T>(string key, Func<T> factory)
{
    //..
    var value = await factory();
}

编译时会报错

CS1061 'Func<T>' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'Func<T>' could be found (are you missing a using directive or an assembly reference?)

C#
dudu的主页 dudu | 高人七级 | 园豆:38815
提问于:2018-03-05 12:15
< >
分享
最佳答案
1
 public async Task<T> GetValueOrCreateAsync<T>(string key, Func<Task<T>> factory)
 {
     //..
     var value = await factory();

     return default(T);
}

Func<T> - > Func<Task<T>>

收获园豆:30
Catcher8 | 菜鸟二级 |园豆:364 | 2018-03-05 14:17
其他回答(2)
0

public static class FuncExtensions
{
public static TaskAwaiter<TResult> GetAwaiter<TResult>(this Func<TResult> function)
{
Task<TResult> task = new Task<TResult>(function);
task.Start();
return task.GetAwaiter();
}
}

收获园豆:10
Jeffcky | 园豆:2563 (老鸟四级) | 2018-03-05 12:37
0

return Task<T>.Run(func);

收获园豆:10
花飘水流兮 | 园豆:11773 (专家六级) | 2018-03-05 13:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册