I am looking for a very good story I read many years ago. The story was about a request to a politician that an old dying man would like to see snow fall before he died. The world now had weather control (maybe by controlling sunspots?) but he was in a warm climate (southern California?) and could not be moved and was near death. The man had been instrumental in the early days of weather control. I think the story starts by following the politician who decided to try to honor the man's request and passes a special bill thru the world legislature to make it happen. It then moves to a women (I think) in the weather service who needs to do something radical (in boats on the sun?) to make it happen. I think there were 3 vignettes but I'm forgetting one of them. The story ends with snow falling on 1 acre and the man gets to see the snow before he dies (which may occur at the end of the snowfall). Does anyone else recall this story and could provide title and author?


Question: Call a chain of WebRequest.BeginGetResponse in sync'ed fashion
Answer: HttpClient would be a better choice. If you can't use it for any reason, wrap BeginGetResponse/BeginGetResponse with Task.Factory.FromAsync, as an extension method:

static public Task&lt;WebResponse&gt; GetResponseAsTaskAsync(this WebRequest @this)
{
    return Task.Factory.FromAsync(
         (asyncCallback, state) =&gt;
             @this.BeginGetResponse(asyncCallback, state),
         (asyncResult) =&gt;
             @this.EndGetResponse(asyncResult), null);
}


Then you do a blocking call like this:

var response = request.GetResponseAsTaskAsync().Result;


If you do a series of request, one after another, you should keep this logic asynchronous and let the client of your PCL library to decide whether to block or not. Something like this:

static public async Task&lt;WebResponse&gt; GetManyResponsesAsync(string[] urls)
{
    WebResponse lastResponse = null;
    foreach (url in urls)
    {
        var request = WebRequest.Create(url);
        var response = await request.GetResponseAsTaskAsync();
        // .. process response
        lastResponse = response;
    }
    return lastResponse;
}


The caller would have a choice to await on the result of GetManyResponsesAsync, or block with GetManyResponsesAsync().Result.