title: Parallel calls to ListBlobs in Azure storage don't result in performance improvement
body: <p>I have code (written in F# but I believe it the choice of language doesn't matter) that calls ListBlobs for each entry in the list of Azure blob directories, about 50 entries in total. The total time for all calls is about 20 seconds. Here's how the original code looks:</p>
  
  <pre><code>enumerateDirectories container
  |&gt; Seq.map (fun x -&gt; listBlobs x)
  |&gt; Seq.concat
  </code></pre>
  
  <p>The function "listBlobs" is a simple wrapper around Azure blob storage ListBlobs method. Since blob listings are independent from each other, I tried running them asynchronously:</p>
  
  <pre><code>enumerateDirectories container
  |&gt; Seq.map (fun x -&gt;
              async {
                   printfn "listBlobs %s" x 
                   return listBlobs x 
              })
  |&gt; Async.Parallel
  |&gt; Async.RunSynchronously
  |&gt; Seq.concat
  </code></pre>
  
  <p>But the execution time didn't improve at all. Then I changed F# async workflow with the parallel sequence call from the pseq module:</p>
  
  <pre><code>enumerateDirectories container
  |&gt; PSeq.map (fun x -&gt; listBlobs x)
  |&gt; Seq.concat
  </code></pre>
  
  <p>This improved the execution time so it took only half of what it used to be. Still, it takes about 10 seconds comparing to a less than a second for a single ListBlob call. I wonder why. Shouldn't calls to ListBlobs execute concurrently so the total time would be comparable with the single call time plus some overhead?</p>