Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使AsyncMethod调用通用_C#_Windows Phone 7_Restsharp - Fatal编程技术网

C# 如何使AsyncMethod调用通用

C# 如何使AsyncMethod调用通用,c#,windows-phone-7,restsharp,C#,Windows Phone 7,Restsharp,我试图将令牌验证提取到一个单独的方法中,然后在else语句中的代码块我同样希望使其成为泛型 public void Subscribe(string s1, string s2, string s3) { if (token == null || token.IsExpired) { RestClient client = CreateRestClient(); RestReq

我试图将令牌验证提取到一个单独的方法中,然后在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
,但是我将使用通用令牌方法的其他方法不一定具有相同的签名

提前感谢您的输入:)

Action
RestClient.ExecuteAsync
的类型


有返回值时使用
Func
,因为没有返回值,所以使用
Action

泛型是什么意思,是指使用自动填充.NET类的泛型方法,还是使代码更通用,因为调用方可以选择回调方法,而不是嵌入?抱歉,我没有说得更具体-我想让代码更通用,以便调用方可以选择回调。是的,我理解这一点,但您如何实现回调的通用性,这意味着回调所做的事情取决于最初调用该方法的人?在方法中添加一个类型为
Action
的附加参数(在三个字符串之后)。将lambda表达式本身替换为该参数。例如
c.ExecuteAsync(r,action)。然后在调用
Subscribe
时提供lambda表达式。