2016-07-25 140 views
4

我在下面的代码集中得到下面的错误,它在'alliancelookup'行错误,我不知道我做错了什么,但我不能看到自己的任何事查询即时运行到波峰似乎运行良好,但它似乎是问题与Awaiter,我想知道是否有解决方法?不包含'GetAwaiter'的定义

DynamicCrest crest = new DynamicCrest(); 
var root = await crest.GetAsync(crest.Host); 
var alliancelookup = await (await root.GetAsync(r => r.alliances)).First(i => i.shortName == e.GetArg("allianceticker").ToUpper()); 
allianceid = alliancelookup.id; 

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'System.Dynamic.ExpandoObject' 不包含关于 'GetAwaiter' 在CallSite.Target(封闭,调用点,对象) 在System.Dynamic定义.UpdateDelegates.UpdateAndExecute1 [T0,TRet](CallSite站点,T0 arg0) at ***。Program。 <> c。 < b__2_10> d.MoveNext()在C:\用户--- \文档\ Visual Studio的2015年\项目------ \的Program.cs:行95

+0

这将有助于了解第95行是什么。你得到的错误非常简单。你尝试“等待”的任何对象都没有正确地实现所需要的GetAwaiter方法。 – Nitram

回答

0

您正在等待一个ASYN调用,这样你必须把异步任务的方法开始你在哪里调用此代码

public async Task<returntyp> Name() 
{ 
    DynamicCrest crest = new DynamicCrest(); 
    var root = await crest.GetAsync(crest.Host); 
    var alliancelookup = await (await root.GetAsync(r => r.alliances)).First(i => i.shortName == e.GetArg("allianceticker").ToUpper()); 
    allianceid = alliancelookup.id; 
+5

如果没有'async',则会出现编译错误,而不是运行时错误。 – GSerg

5

这是不可能确切地知道什么是错的没有minimal, complete, verifiable example,但它看起来像你await荷兰国际集团与工作不事这并不意味着要编辑await

分裂的alliancelookup行:

// Asynchronously retrieve the alliances. 
var alliances = await root.GetAsync(r => r.alliances); 

// Synchronously get the first matching one. 
var allianceLookup = alliances.First(i => i.shortName == e.GetArg("allianceticker").ToUpper()); 

有可能是一个更好的方法,过滤器移动到异步代码,但是这取决于DynamicCrest

0

你还有一个比你需要的更多。你只需要等待异步方法,但你也在等待结果,这显然声明类型是dynamic。这就是为什么你没有收到编译时错误。

使用dynamic它会尝试绑定运行时需要的方法。使用异步当该方法是.GetAwaiter()中,因此RuntimeBinderException“不包含一个定义‘GetAwaiter’”

这就是说,第三行应该是:

var alliancelookup = (await root.GetAsync(r => r.alliances)).First(i => i.shortName == e.GetArg("allianceticker").ToUpper()); 

虽然分手了如Stephen Cleary建议的是一种更好的做法。

相关问题