An Azure service that stores unstructured data in the cloud as blobs.
In theory up the block size. The block size determines how big a block is transferred at a time. Each block triggers a progress call I believe. So if you are uploading a 100K file and you set the block size at 25K then you'd expect 4 calls for that file. If you want fewer calls then increase the block size. Of course if you have a fast network connection then you will get more progress notifications per second because of the faster connection speed.
Also be aware that the concurrency kicks in as well. So if you are dealing with that 100K file with a block size of 10K and you have concurrency set to 2 then you would expect 10 calls but those are happening across 2 "threads" so you could see 2 calls each time. The higher the concurrency and smaller the block size then the more calls you'll be seeing at once.
Finally, if you are doing something expensive during the progress handler then you could also consider batching that as well. For example if you are updating a UI each time the handler is called then you could use some heuristics to determine when to update the UI instead (e.g. only every 2% or something).