私は別の方法にトークンの検証を抽出しようとしています。その後、else文のコードブロックも同じようにジェネリックにしたいと考えています。AsyncMethodコールジェネリックの作成方法
public void Subscribe(string s1, string s2, string s3)
{
if (token == null || token.IsExpired)
{
RestClient client = CreateRestClient();
RestRequest treq = CreateTokenRequest();
client.ExecuteAsync(treq, (response) =>
{
CreateNewToken(response.Content);
SubscribeToNotifications(s1, s2, s3);
});
}
else
{
var c = new RestClient(ServiceAddress);
var r = new RestRequest("Subscribe?");
r.AddParameter("P1", s1);
r.AddParameter("P2", s2);
r.AddParameter("P3", s3);
r.AddHeader("Authorization", token.TokenString);
c.ExecuteAsync(r, (response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
SubcribeCompleted(this, new GeneralEventArgs(true, string.Empty));
else if (response.StatusCode == HttpStatusCode.Unauthorized)
SubcribeCompleted(this, new GeneralEventArgs(false, "Unauthorized!"));
else
SubcribeCompleted(this, new GeneralEventArgs(false, "Error"));
});
}
}
問題は、コールバックハンドラでどのメソッドを呼び出すかを指定する方法です。 私はFunc<>
で試しましたが、ジェネリックトークンメソッドを使用する他のメソッドは、必ずしも同じシグネチャを持つわけではありません。任意の入力:)
ジェネリックで何を意味するのですか?.NETクラスを自動入力するジェネリックメソッドを使用することを意味しますか、コールバックメソッドを埋め込みではなく呼び出し元によって選択できるという点で、 – Guvante
申し訳ありません。私はより具体的ではありませんでした。コールバックを呼び出し元が選択できるように、コードをより汎用的にしたいと考えています。 –