簡體   English   中英

不包含'GetAwaiter'的定義

[英]does not contain a definition for 'GetAwaiter'

我用下面的代碼集得到了下面的錯誤,這是'alliancelookup'行上的錯誤,我不知道我做錯了什么,但我自己也看不到任何東西。 運行到頂部的查詢似乎運行正常,但似乎我遇到的問題是與Awaiter,我想知道是否有辦法解決這個問題?

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'在System.Dynamic.UpdateDelegates.UpdateAndExecute1 [T0,TRet](CallSite)的CallSite.Target(Closure,CallSite,Object)中不包含'GetAwaiter'的定義網站,T0 arg0)at ***。程序。<> c。<b__2_10> d.MoveNext()在C:\\ Users --- \\ Documents \\ Visual Studio 2015 \\ Projects ------ \\ Program.cs :第95行

如果沒有一個最小的,完整的,可驗證的例子 ,就不可能確切地知道出了什么問題,但看起來你正在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建議拆分是一種更好的做法。

您正在等待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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM