Solved

ASP.net async emails

Posted on 2012-04-04
7
559 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
7 Comments
 
LVL 40

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 40

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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
Come and listen to Percona CEO Peter Zaitsev discuss what’s new in Percona open source software, including Percona Server for MySQL (https://www.percona.com/software/mysql-database/percona-server) and MongoDB (https://www.percona.com/software/mongo-…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…

717 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