ThreadPool.QueueUserWorkItem returns false on failure!
ThreadPool.QueueUserWorkItem is commonly used to execute some task in the background at a later point in time using a thread from the thread pool. If you read the MSDN documentation carefully, you'll note it says:
Return Value
true if the method is successfully queued; otherwise, false.
Exception type | Condition |
---|---|
An out-of-memory condition was encountered. |
Wow! It might just return false if it fails instead of throwing an exception. This must be one of those early APIs that they didn't get right the first time and couldn't change later for legacy reasons. It also uses ApplicationException, which seems very odd. I rarely see code that checks the result, including the sample code on the MSDN documentation site! This could cause unexpected failures in your application.
Comments
Anonymous
March 15, 2006
You should probably have a talk with Brad Abrams.
Exceptions and errors are different. Exception is not a mechanism to throw errors. A function can throw an exception if it thinks continuing from that state would fail the program.
If QueueWorkItem fails, he should just return an error. If QueueWorkItem ends up in a state that the program can no longer continue, then by all means throw an exception.
Then what is the purpose of the exception handling? It should just save some state, give a meaningful error message and exit.
Regarding your comment on not checking return code, I am sorry to say, a person writing such code should move to marketing department.
Summary: Exceptions are irrecoverable errors, that's it.Anonymous
March 15, 2006
Exceptions are an error handling mechanism. FailFast is the mechanism for irrecoverable errors. If you can't continue excecution, you should FailFast, not throw an exception.
A function should throw an exception if it doesn't do what it says it's going to do. So, if it doesn't queue a work item, it should throw an exception. If it was called TryQueueWorkItem, it would be expected to return a bool with the success state.
You should take a look at http://msdn2.microsoft.com/en-us/library/ms229014.aspx and http://msdn2.microsoft.com/en-us/library/ms229030(VS.80).aspx. These are from Brad's book.Anonymous
March 31, 2006
The comment has been removedAnonymous
July 26, 2006
In part 2, I showed a base class for DataModels. In this post, I will describe a sample implementation....Anonymous
January 06, 2007
In part 2 , I showed a base class for DataModels. In this post, I will describe a sample implementation.Anonymous
May 29, 2009
PingBack from http://paidsurveyshub.info/story.php?title=dan-crevier-s-blog-threadpool-queueuserworkitem-returns-false-on-failure