I have a few problems regarding ASP .NET MVC 4 Parallel Programming. I want to use Parallel programming, because of receive data from multiple API calls at same time.
Here are some small examples
RootObjectRS fairsearchRS1 = new RootObjectRS();
RootObjectRS fairsearchRS2 = new RootObjectRS();
RootObjectRS fairsearchRS3 = new RootObjectRS();
fairsearchRS1 = MakeRequest(searchUrl, WWWToken, request.TripType1, request.TripfromAirPort1, request.TriptoAirPort1, request.FlyfromDate1, request.FlytoDate1, request.Flyclass, request.Passengers, starting, reqstid);
fairsearchRS2 = MakeRequest(searchUrl, WWWToken, request.TripType2, request.TripfromAirPort2, request.TriptoAirPort2, request.FlyfromDate2, request.FlytoDate2, request.Flyclass, request.Passengers, starting, reqstid);
fairsearchRS3 = MakeRequest(searchUrl, WWWToken, request.TripType3, request.TripfromAirPort3, request.TriptoAirPort3, request.FlyfromDate3, request.FlytoDate3, request.Flyclass, request.Passengers, starting, reqstid);
This is just small example of my code. Using make request I'm calling those API's,and get data from them and bind it to those rootobjectRS, objects.
Right now I'm sending these requests one by one. But I need to do this at same time and I need to wait till those 3 request data arrive.
So how should I approach this using parallel or another programming method? Because right now it takes 1 minutes. But if I do this same time then I can do this in 20 seconds. That's main thing save time.
I don't know if this parallel programming concept is possible from ASP .NET MVC4. But if someone can give me support for this, then that would be great help. At least some good tutorial also great help.
Edit
Actually this is my makeRequest function,
public static RootObjectRS MakeRequest(string requestUrl, SeneruUBT.Models.TokenModels token, string triptype, string from, string to, string flyin, string flyout, string flyclass, string passengers, DateTime starting, int reqstid)
{
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
request.Headers.Add("Authorization", token.token_type + " " + token.access_token);
request.Accept = "application/json";
string ttrip = triptype;
var streamWriter = new StreamWriter(request.GetRequestStream());
if (ttrip.Equals("OneWay"))
{
RootObject searchBFMRQO = CreateRequestObjectOneWay(triptype, from, to, flyin, flyclass, passengers);
String searchString = JsonConvert.SerializeObject(searchBFMRQO);
streamWriter.Write(JsonConvert.SerializeObject(searchBFMRQO));
streamWriter.Flush();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var httpResponse = (HttpWebResponse)request.GetResponse();
int sc = (int)httpResponse.StatusCode;
System.Diagnostics.Debug.Write(sc);
if (httpResponse.StatusCode != HttpStatusCode.OK)
{
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
RootObjectRS errorresult = JsonConvert.DeserializeObject<RootObjectRS>(result);
return (errorresult);
}
}
else
{
var resp = new StreamReader(httpResponse.GetResponseStream()).ReadToEnd();
RootObjectRS searchResponse = JsonConvert.DeserializeObject<RootObjectRS>(resp.ToString());
SearchResponseFlightService ResponsFlSer = null;
ResponsFlSer = new SearchResponseFlightService(new UBTRepository.UBTUnitofWorks(new UBTRepository.TravelEntities()));
SearchResponseFlight ReFl = new SearchResponseFlight();
ReFl.searchRequestID = reqstid;
ReFl.StopQuantity = "1";
ReFl.responseJson = resp.ToString();
DateTime ending = DateTime.Now;
ReFl.responseDuration = ending.Subtract(starting).Milliseconds;
ReFl.starttimestamp = starting;
ReFl.endtimestamp = ending;
ResponsFlSer.Add(ReFl);
searchResponse.reqid = reqstid;
return (searchResponse);
}
}
I think now it can be little bit easy to understand.
After Change my make request to async it doesnt work-t give error in MakeRequestAsync.
public static async Task RootObjectRS MakeRequestAsync(string requestUrl, SeneruUBT.Models.TokenModels token, string triptype, string from, string to, string flyin, string flyout, string flyclass, string passengers, DateTime starting, int reqstid)
{
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
request.Headers.Add("Authorization", token.token_type + " " + token.access_token);
request.Accept = "application/json";
string ttrip = triptype;
var streamWriter = new StreamWriter(await request.GetRequestStreamAsync());
if (ttrip.Equals("OneWay"))
{
RootObject searchBFMRQO = CreateRequestObjectOneWay(triptype, from, to, flyin, flyclass, passengers);
String searchString = JsonConvert.SerializeObject(searchBFMRQO);
streamWriter.Write(JsonConvert.SerializeObject(searchBFMRQO));
streamWriter.Flush();
}
HttpWebResponse response = await (HttpWebResponse)request.GetResponseAsync();
var httpResponse = await (HttpWebResponse)request.GetResponseAsync();
int sc = (int)httpResponse.StatusCode;
System.Diagnostics.Debug.Write(sc);
var resp = new StreamReader(await httpResponse.GetResponseStreamAsync()).ReadToEnd();
RootObjectRS searchResponse = JsonConvert.DeserializeObject<RootObjectRS>(resp.ToString());
SearchResponseFlightService ResponsFlSer = null;
ResponsFlSer = new SearchResponseFlightService(new UBTRepository.UBTUnitofWorks(new UBTRepository.TravelEntities()));
SearchResponseFlight ReFl = new SearchResponseFlight();
ReFl.searchRequestID = reqstid;
ReFl.StopQuantity = "1";
ReFl.responseJson = resp.ToString();
DateTime ending = DateTime.Now;
ReFl.responseDuration = ending.Subtract(starting).Milliseconds;
ReFl.starttimestamp = starting;
ReFl.endtimestamp = ending;
ResponsFlSer.Add(ReFl);
searchResponse.reqid = reqstid;
return (searchResponse);
}