[Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

ASP.net async emails

Posted on 2012-04-04
7
Medium Priority
?
564 Views
Last Modified: 2012-08-14
Hello

Can anyone tell me what the performance implications are of sending emails asynchronously in asp.net when there are hundreds getting sent at one time. Is a new thread created for each async email request?

Basically I want to fire and forget emails from my site without waiting on the process to complete, this isn't for bulk email but for individual emails to users when required.

I'm expecting reasonable traffic and I'm just worried that thousands of threads are going to be created and my web server will crawl to a stop - or am I worrying about nothing?

Thanks!
0
Comment
Question by:badpilot
  • 3
  • 2
  • 2
7 Comments
 
LVL 41

Expert Comment

by:Kyle Abrahams
ID: 37806711
A new thread would be created for each async call.

Instead, it's better to create one background thread and then send them synchronously from that thread.
0
 

Author Comment

by:badpilot
ID: 37806817
Thanks for your quick reply.

So at Application Start I should create a new background thread and send all mail through that?

Is it a good idea to leave a thread open like this all the time? Do I need to explicitly close this thread at application close? I take it I would need to deal with checking the thread is still live if for some reason it closed do to an exception etc.

Can you provide any code examples or links?

Many thanks!
0
 
LVL 41

Expert Comment

by:Kyle Abrahams
ID: 37807564
Create the thread when sending the email and then terminate it when the process is done. There is no need to have it open or live the whole time.

Here is an example:
http://www.pcreview.co.uk/forums/send-email-background-thread-t3829532.html
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
LVL 23

Accepted Solution

by:
wdosanjos earned 2000 total points
ID: 37808335
Instead of spawning a thread for every email by directly instantiating System.Threading.Thread consider using System.Threading.ThreadPool instead, otherwise you run the risk of starving your system of resources.
Thread Pooling (C# and Visual Basic)
http://msdn.microsoft.com/en-us/library/h4732ks0.aspx
I hope this helps.
0
 

Author Comment

by:badpilot
ID: 37812382
Thread Pooling looks like what I'm looking for - two quick questions if you will:

The sample code on MSDN seems to suggest I don't need to instantiate a threadpool object - I can just add my task direct to the pool - I take it the framework handles everything else for me?

How do I handle errors with tasks added to the pool - do I just need to add a try catch to the sub that I pass to the pool?

Many thanks for you help.
0
 
LVL 23

Expert Comment

by:wdosanjos
ID: 37812487
That's right, .NET handles everything for you so you don't need to instantiate ThreadPool (and since it's a static class it cannot be instantiated).  The callback method should handle errors with try/catch/finally  blocks.
0
 

Author Closing Comment

by:badpilot
ID: 37812495
Perfect, exactly what I needed, thank you!
0

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

IntroductionWhile developing web applications, a single page might contain many regions and each region might contain many number of controls with the capability to perform  postback. Many times you might need to perform some action on an ASP.NET po…
Simulator games are perfect for generating sample realistic data streams, especially for learning data analysis. It is even useful for demoing offerings such as Azure stream analytics, PowerBI etc.
Integration Management Part 2
Are you ready to place your question in front of subject-matter experts for more timely responses? With the release of Priority Question, Premium Members, Team Accounts and Qualified Experts can now identify the emergent level of their issue, signal…
Suggested Courses
Course of the Month20 days, 10 hours left to enroll

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question