在此示例控制台应用中:
class Program
{
static void Main()
{
DoAsyncFoo();
Console.ReadKey();
}
private static async void DoAsyncFoo()
{
var task = CollectStatsAsync();
dynamic foo = await task;
Console.WriteLine(foo.NumberOfCores);
}
private static async Task<dynamic> CollectStatsAsync()
{
return CollectStats();
}
private static dynamic CollectStats()
{
return new { NumberOfCores = 3 };
}
}
当我把断点放到
时Console.WriteLine(foo.NumberOfCores)
并在调试模式下评估foo.NumberOfCores,错误输出为:
gatherStats.NumberOfCores&#39; object&#39;不包含定义 for&#39; NumberOfCores&#39;没有扩展方法&#39; NumberOfCores&#39;验收 类型&#39;对象&#39;的第一个参数可以找到(你错过了吗? 使用指令或程序集引用?)
因为collectStats是&#34;匿名对象&#34;而不是&#34;动态&#34;。但是,该函数返回动态,我将其指定为动态。
评估成功:
((dynamic)foo).NumberOfCores;
顺便说一句,我已经意识到如果我同步编写函数,调试器可以直接返回结果。所以它应该是异步的。
注意:我也尝试从函数返回Expando Object而不是Anonymous Type,结果是一样的。
答案 0 :(得分:0)
仅供参考我刚刚在VS 2013 SP4中对此进行了测试,并且它没有问题......
你有SP4应用吗? 可能不是这个,但值得排除。因为我没有任何问题。
代码我累了没有问题。
public class Program
{
static void Main()
{
DoAsyncFoo();
Console.ReadKey();
}
private static async void DoAsyncFoo()
{
var task = CollectStatsAsync();
dynamic foo = await task;
Console.WriteLine(foo.NumberOfCores);
}
private static async Task<dynamic> CollectStatsAsync()
{
return CollectStats();
}
private static dynamic CollectStats()
{
return new { NumberOfCores = 3 };
}
}