Why is my code stopping and not returning an exception?

Posted by BeckyLou on Stack Overflow See other posts from Stack Overflow or by BeckyLou
Published on 2010-05-11T14:01:34Z Indexed on 2010/05/11 14:04 UTC
Read the original article Hit count: 224

Filed under:
|
|

I have some code that starts a couple of threads to let them execute, then uses a while loop to check for the current time passing a set timeout period, or for the correct number of results to have been processed (by checking an int on the class object) (with a Thread.Sleep() to wait between loops)

Once the while loop is set to exit, it calls Abort() on the threads and should return data to the function that calls the method.

When debugging and stepping through the code, I find there can be exceptions in the code running on the separate threads, and in some cases I handle these appropriately, and at other times I don't want to do anything specific.

What I have been seeing is that my code goes into the while loop and the thread sleeps, then nothing is returned from my function, either data or an exception. Code execution just stops completely.

Any ideas what could be happening?


Code sample:

System.Threading.Thread sendThread = 
     new System.Threading.Thread(new System.Threading.ThreadStart(Send));
sendThread.Start();

System.Threading.Thread receiveThread = 
     new System.Threading.Thread(new System.Threading.ThreadStart(Receive));
receiveThread.Start();

// timeout
Int32 maxSecondsToProcess = this.searchTotalCount * timeout;
DateTime timeoutTime = DateTime.Now.AddSeconds(maxSecondsToProcess);
Log("Submit() Timeout time: " + timeoutTime.ToString("yyyyMMdd HHmmss"));

// while we're still waiting to receive results & haven't hit the timeout, 
// keep the threads going
while (resultInfos.Count < this.searchTotalCount && DateTime.Now < timeoutTime)
{
    Log("Submit() Waiting...");
    System.Threading.Thread.Sleep(10 * 1000); // 1 minute
}

Log("Submit() Aborting threads");    // <== this log doesn't show up

sendThread.Abort();
receiveThread.Abort();

return new List<ResultInfo>(this.resultInfos.Values);

© Stack Overflow or respective owner

Related posts about c#

Related posts about multithreading