I am trying to integrate a third party library in my WPF application. This library is used to collect credit card history for a person by his/her social security number. It basically provides a method that returns void. Once that method is complete, you can collect credit card history. 

```
ThirdPartyLibrary Instance = new Instance(SSN);
Instance.Run();    // This method returns a void and it blocks until data retrieval completes
if ( Instance.Success )
    CreditHistory History = Instance.CreditHistory;

```

Now I want to run this API for number of persons simultaneously, however, I also want to have a threshold of maximum number of requests at a time. If that threshold is hit, I would like to wait for one of those request to complete before sending a new request. Finally I would like provide an update my UI as any one of submitted requests succeeds or fails.

Here are my questions:

1. This third party API may end up waiting for quite sometime for collecting the information. Is using TPL/PLINQ APIs like `Parallel.ForEach` or `AsParallel` good candidate for this situation?
2. Can I use `await/async` to create a wrapper around calls to third party library given that its Run method returns a void?
3. What would be best approach to wait for individual request submitted so that I can keep updating my UI about the progress.

Please provide your suggestions (with some sample code) on how it should be designed/implemented? I have been doing lot of reading on Tasks and Async/Await but got quite confused as what could be best patterns for this use case?