I am new to Async/Await. I have to call api and sace result into a txt file. I used webclient.OpenRead and was able to save the file. I want to run my code with multiple inputs to API and I would like to run it in parallel.
For sequential operation I used WebClient.OpenRead() as code works.
class Program
{
static void Main(string[] args)
{
var name = "test1";
var filename = $"c:\\temp\\{name}.txt";
var url = $"https://testapi?name eq '{name}')";
using (var client = new WebClient())
{
using (Stream stream = client.OpenRead(url))
using (StreamReader streamReader = new StreamReader(stream))
using (JsonTextReader reader = new JsonTextReader(streamReader))
{
reader.SupportMultipleContent = true;
var serializer = new JsonSerializer();
var parsedData = serializer.Deserialize(reader).ToString();
File.WriteAllText(filename, parsedData);
Console.WriteLine($"Result save at {filename}");
}
}
}
}
For parallel operation I tried to utilize WebClient.OpenReadAsync() but my code is not saving the file in c:\temp\
static void Main(string[] args)
{
var names = new string[] { "test1", "test2" };
foreach (var name in names)
{
var filename = $"c:\\temp\\{name}.txt";
var url = $"https://testapi?name eq '{name}') ";
var client = new WebClient();
client.OpenReadCompleted += (sender, e) =>
{
Stream reply = (Stream)e.Result;
StreamReader s;
s = new StreamReader(reply);
using (JsonTextReader reader = new JsonTextReader(s))
{
reader.SupportMultipleContent = true;
var serializer = new JsonSerializer();
var parsedData = serializer.Deserialize(reader).ToString();
File.WriteAllText(filename, parsedData);
Console.WriteLine($"Result save at {filename}");
}
};
client.OpenReadAsync(new Uri(url));
}
}
What is wrong with my code? Any pointers?