Reputation: 13318
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;
}
MyMethod
should return the string
value when a lambda function will be finished. My questions are:
request.BeginGetResponse
will be finished? MyMethod
will be know about it to return value?Upvotes: 2
Views: 135
Reputation: 25320
To see when the lambda is finished you could use a ManualResetEvent like this:
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;
}
Upvotes: 1