Hi All,
I am trying to perform a non-CPU bound operation in an asynchronous fashion
using 'Thread' and a delegate. Basically, I am spawning a thread using
ThreadStart and Thread.
My non-CPU bound operation needs to have access to Session variables; Even
though I embedded the state information (which also includes the context
object) in an object and passed the object to the Thread , I am unable to
access the Session variables. The system throws a Null Object Reference error.
Since the thread that I am spawning is not from the CLR thread pool, it is
not able to access the Session variable. Am I right? How can a system thread
get access to the Session variables of the current HTTPRequest?
Here is what I am trying to do (in C#):
=====
ThreadStart t = new ThreadStart(LongDBProcess)
// LongDBProcess is a time-consuming process
Thread ts = new Thread(t);
t.start(); //At this point, system thread will be created and not
the CLR thread
====
I need to have access to Session variables inside my LongDBProcess...
private void LongDBProcess()
{
Session["IDCounter"] = i+1; //At this point, I am getting null
reference
}
If I am correct, the thread is not able to access the session. Probably this
thread's scope is outside the Application Domain whereas the session data
will be inside the Application Domain...am I correct?
Thanks for your pointers.
I hope I articulated my problem. If not, please let me know.
Any pointers will be appreciated!
David Browne - 27 Nov 2006 01:48 GMT
> Hi All,
>
[quoted text clipped - 39 lines]
> thread's scope is outside the Application Domain whereas the session data
> will be inside the Application Domain...am I correct?
No. Same app domain. But Session scope is tied to the thread executing the
page request. You can pass to the thread a reference to an object also
contained in session scope, but the background thread can't find objects in
the session scope directly.
David