2016-07-25 10 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 (폐쇄, CallSite, Object)를 에서 System.Dynamic에 대한 정의가 포함되어 있지 않습니다 .UpdateDelegates.UpdateAndExecute1 [T0, TRet] (CallSite 사이트, T0 arg0) **** 프로그램에서 . <> c. < b__2_10> C에서 d.MoveNext() : 라인 95

+0

어떤 줄 95인지 아는 것이 도움이됩니다. 당신이 얻는 오류는 꽤 솔직합니다. '기다리는'객체가 작동하는 데 필요한 'GetAwaiter'메소드를 제대로 구현하지 못합니다. – Nitram

답변

0

당신은 그래서 asyn 호출을 기다리고있다 : \ 사용자 --- \ 문서 ------ \ 프로젝트 \ Program.cs 비주얼 스튜디오 2015 \ 당신은 당신이 코드 그것은 minimal, complete, verifiable example없이 잘못 정확히 알 수는 없습니다

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

를 호출하는 경우이 방법의 시작 부분에 비동기 작업을 넣어,하지만 당신은 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을 사용하면 런타임에 필요한 메서드를 바인딩하려고 시도합니다. 로 분열되지만

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

: 비동기를 사용하여이 방법 .GetAwaiter() 따라서 RuntimeBinderException 상기

는 세 번째 줄이어야 " 'GetAwaiter'가 정의를 포함하지 않는"인 Stephen Cleary가 제안한 것이 더 나은 방법입니다.

관련 문제