468,720 Members | 1,633 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,720 developers. It's quick & easy.

Asynchronous Fire-And-Forget Call

I have read many threads related to async fire and forget type calls, but
none have addressed my particular problem.

I have a webpage that instantiates a BL object and makes a method call. The
BL object method actually sets up a delegate and calls a private method
asynchronously and immediately returns back to the web page.

The problem I am having is that the async call never happens. I added a
quick logging call immediately as the first line of code in the method that
is suppose to get called asynchronously and it never gets called.

I am using an AsyncHelper class mentioned in other posts to help get around
the memory leak issues regarding not calling EndInvoke after a BeginInvoke.

If I call the public method of the BL and just have it call the internal one
without using an async delegate, everything works fine except that the
webpage eventually times out because it can be a very long process.

I am thinking about maybe spawning a new thread manually and letting handle
the long running process to see if I can around the issue. Any ideas on how
to do this asynchronously fire-and-forget within the BL would be greatly
appreciated.
Apr 11 '06 #1
5 4003
You should probably set up a Windows Service to handle such background tasks
reliably.
In ASP.NET threads come and go too quickly for synchronization to be of much
use in most cases.

Here's more info on Windows Services:
http://msdn.microsoft.com/library/de...plications.asp

--
I hope this helps,
Steve C. Orr, MCSD, MVP
http://SteveOrr.net
"Stephen Barrett" <st*************@nospam.aon.com> wrote in message
news:OR**************@TK2MSFTNGP04.phx.gbl...
I have read many threads related to async fire and forget type calls, but
none have addressed my particular problem.

I have a webpage that instantiates a BL object and makes a method call.
The BL object method actually sets up a delegate and calls a private
method asynchronously and immediately returns back to the web page.

The problem I am having is that the async call never happens. I added a
quick logging call immediately as the first line of code in the method
that is suppose to get called asynchronously and it never gets called.

I am using an AsyncHelper class mentioned in other posts to help get
around the memory leak issues regarding not calling EndInvoke after a
BeginInvoke.

If I call the public method of the BL and just have it call the internal
one without using an async delegate, everything works fine except that the
webpage eventually times out because it can be a very long process.

I am thinking about maybe spawning a new thread manually and letting
handle the long running process to see if I can around the issue. Any
ideas on how to do this asynchronously fire-and-forget within the BL would
be greatly appreciated.

Apr 11 '06 #2
I would really love to go the service route. What I originally specd out
was for the BL that the webpage calls to write a message to MSMQ and have a
service that processed messages from the queue. This would be quick and not
involve extra threading and such.

Unfortunately, things out of my control prevent me from using any form of
windows service. The app is deployed to a shared server that many other app
groups use and the high-level managers on the IT side have limited us on
what we can do. Windows services are one thing they said no too. In fact,
our BL tier used to be on a separate server all together that we accessed
through Remoting where the async stuff worked fine. One of these
requirements forced us to bring the BL tier back in process on the webserver
and this is when we started running into problems.

Any ideas on how to do this in when the BL tier is running within the
asp.net web app?

"Steve C. Orr [MVP, MCSD]" <St***@Orr.net> wrote in message
news:O2**************@TK2MSFTNGP04.phx.gbl...
You should probably set up a Windows Service to handle such background
tasks reliably.
In ASP.NET threads come and go too quickly for synchronization to be of
much use in most cases.

Here's more info on Windows Services:
http://msdn.microsoft.com/library/de...plications.asp

--
I hope this helps,
Steve C. Orr, MCSD, MVP
http://SteveOrr.net
"Stephen Barrett" <st*************@nospam.aon.com> wrote in message
news:OR**************@TK2MSFTNGP04.phx.gbl...
I have read many threads related to async fire and forget type calls, but
none have addressed my particular problem.

I have a webpage that instantiates a BL object and makes a method call.
The BL object method actually sets up a delegate and calls a private
method asynchronously and immediately returns back to the web page.

The problem I am having is that the async call never happens. I added a
quick logging call immediately as the first line of code in the method
that is suppose to get called asynchronously and it never gets called.

I am using an AsyncHelper class mentioned in other posts to help get
around the memory leak issues regarding not calling EndInvoke after a
BeginInvoke.

If I call the public method of the BL and just have it call the internal
one without using an async delegate, everything works fine except that
the webpage eventually times out because it can be a very long process.

I am thinking about maybe spawning a new thread manually and letting
handle the long running process to see if I can around the issue. Any
ideas on how to do this asynchronously fire-and-forget within the BL
would be greatly appreciated.


Apr 11 '06 #3
I forgot to mention that is a .net 1.1 asp.net app and not a 2.0.

"Stephen Barrett" <st*************@nospam.aon.com> wrote in message
news:OR**************@TK2MSFTNGP04.phx.gbl...
I have read many threads related to async fire and forget type calls, but
none have addressed my particular problem.

I have a webpage that instantiates a BL object and makes a method call.
The BL object method actually sets up a delegate and calls a private
method asynchronously and immediately returns back to the web page.

The problem I am having is that the async call never happens. I added a
quick logging call immediately as the first line of code in the method
that is suppose to get called asynchronously and it never gets called.

I am using an AsyncHelper class mentioned in other posts to help get
around the memory leak issues regarding not calling EndInvoke after a
BeginInvoke.

If I call the public method of the BL and just have it call the internal
one without using an async delegate, everything works fine except that the
webpage eventually times out because it can be a very long process.

I am thinking about maybe spawning a new thread manually and letting
handle the long running process to see if I can around the issue. Any
ideas on how to do this asynchronously fire-and-forget within the BL would
be greatly appreciated.

Apr 11 '06 #4
you need to setup a background thread to do this. this is because of the
page life cycle.

1. at the start of the request a thread is selected from the pool.
2. a new instance of the page is created
3. the page lifecycle methods are called
4. the request is sent back to the iis.
5. the thread is return to the pool.

it a litle more complicated, as the thread may be returned to the pool and
new one selected during page lifecycle processing.

as you can see, when your delegate fires, the thread that started the async
request may be in the pool, destroyed, or processing the next page request.

if your site has light load, you can create a new thread everytime, if not,
you proably want one background thread, or a pool, created as needed. then
use a queue to send work to it.

note: the new thread will run as the asp.net account, not the account of the
thread creating it, so you may need to do some impersonation.

-- bruce (sqlwork.com)

"Stephen Barrett" <st*************@nospam.aon.com> wrote in message
news:OR**************@TK2MSFTNGP04.phx.gbl...
I have read many threads related to async fire and forget type calls, but
none have addressed my particular problem.

I have a webpage that instantiates a BL object and makes a method call.
The BL object method actually sets up a delegate and calls a private
method asynchronously and immediately returns back to the web page.

The problem I am having is that the async call never happens. I added a
quick logging call immediately as the first line of code in the method
that is suppose to get called asynchronously and it never gets called.

I am using an AsyncHelper class mentioned in other posts to help get
around the memory leak issues regarding not calling EndInvoke after a
BeginInvoke.

If I call the public method of the BL and just have it call the internal
one without using an async delegate, everything works fine except that the
webpage eventually times out because it can be a very long process.

I am thinking about maybe spawning a new thread manually and letting
handle the long running process to see if I can around the issue. Any
ideas on how to do this asynchronously fire-and-forget within the BL would
be greatly appreciated.

Apr 12 '06 #5
IS this as simple as setting the IsBackground property to TRUE when I create
the new thread?

I have tried numerous methods to get this to work.

1) create delegate to private method, and call BeginInvoke with calling
EndInvoke (memory leak possible)

2) create deleate to private method and use AsyncHelper class to basically
fire and forget

3) create a new Thread with ThreadStart pointing to private method

The private method is not getting called in any of these scenarios. Isn't
there a way to create a thread that will survive once the page life cycle
thread finishes?
"bruce barker (sqlwork.com)" <b_*************************@sqlwork.com> wrote
in message news:uB**************@TK2MSFTNGP05.phx.gbl...
you need to setup a background thread to do this. this is because of the
page life cycle.

1. at the start of the request a thread is selected from the pool.
2. a new instance of the page is created
3. the page lifecycle methods are called
4. the request is sent back to the iis.
5. the thread is return to the pool.

it a litle more complicated, as the thread may be returned to the pool and
new one selected during page lifecycle processing.

as you can see, when your delegate fires, the thread that started the
async request may be in the pool, destroyed, or processing the next page
request.

if your site has light load, you can create a new thread everytime, if
not, you proably want one background thread, or a pool, created as needed.
then use a queue to send work to it.

note: the new thread will run as the asp.net account, not the account of
the thread creating it, so you may need to do some impersonation.

-- bruce (sqlwork.com)

"Stephen Barrett" <st*************@nospam.aon.com> wrote in message
news:OR**************@TK2MSFTNGP04.phx.gbl...
I have read many threads related to async fire and forget type calls, but
none have addressed my particular problem.

I have a webpage that instantiates a BL object and makes a method call.
The BL object method actually sets up a delegate and calls a private
method asynchronously and immediately returns back to the web page.

The problem I am having is that the async call never happens. I added a
quick logging call immediately as the first line of code in the method
that is suppose to get called asynchronously and it never gets called.

I am using an AsyncHelper class mentioned in other posts to help get
around the memory leak issues regarding not calling EndInvoke after a
BeginInvoke.

If I call the public method of the BL and just have it call the internal
one without using an async delegate, everything works fine except that
the webpage eventually times out because it can be a very long process.

I am thinking about maybe spawning a new thread manually and letting
handle the long running process to see if I can around the issue. Any
ideas on how to do this asynchronously fire-and-forget within the BL
would be greatly appreciated.


Apr 13 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Guyon Morée | last post: by
1 post views Thread by Franky | last post: by
1 post views Thread by dba123 | last post: by
2 posts views Thread by Diffident | last post: by
3 posts views Thread by senfo | last post: by
4 posts views Thread by Morgan Cheng | last post: by
1 post views Thread by CARIGAR | last post: by
1 post views Thread by Oskars | last post: by
9 posts views Thread by bryonone | last post: by
reply views Thread by zhoujie | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.