I am a neophyte at C# threading. I am trying to get my head around how to make 100K web requests, with some degree of parallelism, and report progress real-time to the GUI:
urls processed so far: ######
total moved so far: ######
timed out so far: ####3
I am reading pages 596ff in C# 5.0 in a Nutshell by the Albahari brothers, the section on Progress Reporting. At this point, I don't see how in the Progress instance these counters would be incremented in a thread-safe manner, and exactly how/where the UI gets updated. EVen in the example specifically discussing the differences between writing to the console and writing to the GUI, the book uses Console.WriteLine
. I'd be grateful for an example showing exactly what occurs in the Progress instance -- incrementing some int variables and writing to a textbox, for example.
I have a walkthrough on my blog, in particular pointing out the caveats:
IProgress<T>.Report
is asynchronous, so it works best if the object you send it is immutable.IProgress<T> progress
passed into your TAP method may benull
, so check for that before reporting progress.Progress<T>
works best with a UI or other single-threadedSynchronizationContext
.Progress<T>
's handler go directly to theSynchronizationContext
, so avoid throwing exceptions from the progress report handler.There's also a blog post here and the MSDN docs are quite good.