Solved

ASP.net async emails

Posted on 2012-04-04
7
547 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 39

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 39

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
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 23

Accepted Solution

by:
wdosanjos earned 500 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

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

757 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

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now