Hi =)
*First of all you must deal with Async pattern more carefully !!
* Coding the way like you did , how correct to say - is old school ;)
However , let's fix your problem,i'm going to resolve it with help of third-party tool called Rx (Reactive extension for WP).
So, let's define few helper methods :
public static IObservable ToResponse(this WebRequest request)
{
var asyncGetResponse = Observable.FromAsyncPattern(
request.BeginGetResponse, request.EndGetResponse);
return Observable.Defer(asyncGetResponse);
}
public static IObservable ToBytes(this Stream stream)
{
return
Observable.Create(
observer =>
{
byte[] buffer = new byte[24];
var obsReadFactory = Observable.Defer(() => stream.AsReader()(buffer, 0, buffer.Length));
return Observable
.Repeat(obsReadFactory)
.Select(i => buffer.Take(i).ToArray())
.SubscribeOn(Scheduler.ThreadPool)
.Subscribe(
_ =>
{
if (_.Length > 0)
{
observer.OnNext(_);
}
else
{
observer.OnCompleted();
}
},
observer.OnError,
observer.OnCompleted
);
}
);
}
And the last thing that remain , is to deal with WebRequest and proper request for it
string url = _devApiUrl + "session/" + _entityKey;
var webRequest = WebRequest.Create(url);
webRequest.Headers["Host"] = _host;
webRequest.ContentType = "text/json";
webRequest.Method = "GET";
webRequest.ToResponse()
.SelectMany(wr => wr.GetResponseStream().ToBytes())
.ForEach(b => {
string data= Encoding.Default.GetString(b);
}));