不包含'GetAwaiter'的定义
我在下面的代码集中得到下面的错误,它在'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
您正在等待一个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;
如果没有'async',则会出现编译错误,而不是运行时错误。 – GSerg
这是不可能确切地知道什么是错的没有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
。
你还有一个比你需要的更多。你只需要等待异步方法,但你也在等待结果,这显然声明类型是dynamic
。这就是为什么你没有收到编译时错误。
使用dynamic
它会尝试绑定运行时需要的方法。使用异步当该方法是.GetAwaiter()中,因此RuntimeBinderException“不包含一个定义‘GetAwaiter’”
这就是说,第三行应该是:
var alliancelookup = (await root.GetAsync(r => r.alliances)).First(i => i.shortName == e.GetArg("allianceticker").ToUpper());
虽然分手了如Stephen Cleary建议的是一种更好的做法。
这将有助于了解第95行是什么。你得到的错误非常简单。你尝试“等待”的任何对象都没有正确地实现所需要的GetAwaiter方法。 – Nitram