.net 4.0 在WP7中,如何知道异步方法何时完成?

.net 4.0 在WP7中,如何知道异步方法何时完成?,.net-4.0,windows-phone-7.1,.net 4.0,Windows Phone 7.1,当lambda函数完成时,MyMethod应返回string值。我的问题是: 我怎么知道lambda函数在什么时候 请求。BeginGetResponse将完成吗 MyMethod将如何知道它以返回值 要查看lambda何时完成,可以使用如下手动重置事件: public string MyMethod(string param1) { var url = string.Format(UrlMask, HttpUtility.UrlEncode(param1), Log

当lambda函数完成时,
MyMethod
应返回
string
值。我的问题是:

  • 我怎么知道lambda函数在什么时候
    请求。BeginGetResponse
    将完成吗
  • MyMethod
    将如何知道它以返回值

要查看lambda何时完成,可以使用如下手动重置事件:

 public string MyMethod(string param1)
     {
       var url = string.Format(UrlMask, HttpUtility.UrlEncode(param1), Login, ApiKey);
       HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
       request.BeginGetResponse(result =>
                {
                    var requestInternal = (HttpWebRequest)result.AsyncState;
                    var response = (HttpWebResponse)requestInternal.EndGetResponse(result);

                    using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
                    {
                        var resultXml = XDocument.Load(response.GetResponseStream());
                        var x = from r in resultXml.Descendants("node")
                                select r.Element("element").Value;

                    }
                }, request);

                return null;
            }
    public string MyMethod(string param1) 
    {
        const int timeOutInMs = 1000;

        using (ManualResetEvent ended = new ManualResetEvent(false))
        {
            var url = string.Format(UrlMask, HttpUtility.UrlEncode(param1), Login, ApiKey);
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.BeginGetResponse(result =>
                                         {
                                             var requestInternal = (HttpWebRequest) result.AsyncState;
                                             var response = (HttpWebResponse) requestInternal.EndGetResponse(result);
                                             using (
                                                 StreamReader streamReader =
                                                     new StreamReader(response.GetResponseStream()))
                                             {
                                                 var resultXml = XDocument.Load(response.GetResponseStream());
                                                 var x = from r in resultXml.Descendants("node")
                                                         select r.Element("element").Value;
                                             }
                                             ended.Set();
                                         }, request);

            if (!ended.WaitHandle.WaitOne(timeOutInMs))
            {
                throw new TimeoutException("lambda took too long to complete");
            }
        }
        return null; 
    }