Another tip from Gal:"
Just a small tip that might have saved me a few good hours:
A Mutex can be released only by the thread that originally locked it.
A semaphore can be released by any thread.
I used a mutex at the beginning, while locking and releasing on different threads, and at the threadpool desire, got ("sometimes" is the WORST one) an
ApplicationException - Object synchronization method was called from an unsynchronized block of code.
Usually this means that the mutex is not locked but still tries to be released – check this out.
But in my case (first remoting call locks an object and the second releases), it was just that a mutex was the wrong sync method, and a semaphore quickly solved the problem.
As mentioned in the link, the error message need some work."