Как заставить вызов AsyncMethod универсальным - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь извлечь проверку токена в отдельный метод, и после этого блок кода в операторе else я бы тоже хотел сделать универсальным.

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<>, но другие методы, где я бы использовал универсальный метод токена, не обязательно имеют ту же сигнатуру.

Заранее спасибо за любой вклад:)

1 Ответ

0 голосов
/ 09 февраля 2012

Action<RestResponse> - это тип RestClient.ExecuteAsync.

Func<> используется при наличии возвращаемого значения, поскольку его нет, Action<> используется.

...