よく定義されたモデルを使用して、よく定義されたWeb APIにLINQプロバイダを構築しようとしています。Task.Resultオブジェクトの取得時に、非同期のジェネリックメソッドをリフレクションで呼び出すカスタムLINQプロバイダが失敗する
それは、すべてのピースが提供してまとめることが必要な部分になったまでそれはうまくいったが、実行非ジェネリックがあります。私は、これらのウォークスルーを、次のいメソッドは、リフレクションを使用してカスタムHTTPRequestクラスの非同期メソッドが呼び出され、その部分が非常にうまく動作するため、返されたTaskオブジェクトのResultプロパティの値を取得しようとすると、TargetExceptionが " :オブジェクトがターゲットタイプと一致しません。
これは、例外が発生したコードですが、私は他の部分が関連しているとは思わない:
public override object Execute(Expression expression)
{
var elementType = TypeSystem.GetElementType(expression.Type);
var task = GetResult(expression, elementType);
var resultProperty = typeof (Task<>).MakeGenericType(elementType).GetProperty("Result");
//It fails here!
var result = resultProperty.GetValue(task);
return result;
}
private async Task GetResult(Expression expression, Type elementType)
{
var requestUrl = Translate(expression);
var method = _httpRequest.GetType().GetMethod("GetHttpRequest").MakeGenericMethod(new[] { elementType });
var task = (Task) method.Invoke(_httpRequest, new object[] { requestUrl });
await task;
}
私が返される必要があるオブジェクトがIEnumerableをあるべきことを考えていると、何が来ていますResultプロパティのうち1つはTですが、これに対処しなければならないと確信していますが、現在の例外の理由は信じられません。
何か助けていただければ幸いです。
'async Task GetResult'そのメソッドから返されるタスクはあなたが'待っている 'ものではないため、結果はありません。 –