{"id":12998,"date":"2022-10-02T17:24:05","date_gmt":"2022-10-02T11:54:05","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/"},"modified":"2022-10-02T17:24:05","modified_gmt":"2022-10-02T11:54:05","slug":"solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/","title":{"rendered":"[Solved] How to make a IHostingService to send emails on order confirm?"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-64205177\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"64205177\" data-parentid=\"64204676\" data-score=\"2\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>A background (hosted) service is a <em>completely<\/em> different service, using its own thread to do its job. You can&#8217;t have your controller &#8220;run&#8221; something on that service, you have to tell it what to do, and have it do it.<\/p>\n<p>The <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/docs.microsoft.com\/en-us\/aspnet\/core\/fundamentals\/host\/hosted-services?view=aspnetcore-3.1&amp;tabs=visual-studio\">Background tasks with hosted services<\/a> section in the docs shows two different ways a long running background service can work :<\/p>\n<ul>\n<li>A timed service can run each time a timer fires and do a periodic job, as long as the application is running<\/li>\n<li>A <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/docs.microsoft.com\/en-us\/aspnet\/core\/fundamentals\/host\/hosted-services?view=aspnetcore-3.1&amp;tabs=visual-studio#queued-background-tasks\">queued service<\/a> waits for messages in a queue and performs a job when a message arrives<\/li>\n<\/ul>\n<p>Sending an email fits into the second case. You could use the documentation example almost as-is. You can create an <code>IBackgroundTaskQueue<\/code> interface that clients like your controller can use to submit jobs to run in the background:<\/p>\n<pre><code>public interface IBackgroundTaskQueue\n{\n    void QueueBackgroundWorkItem(Func&lt;CancellationToken, Task&gt; workItem);\n\n    Task&lt;Func&lt;CancellationToken, Task&gt;&gt; DequeueAsync(\n        CancellationToken cancellationToken);\n}\n<\/code><\/pre>\n<p>This interface can be added as a dependency in your container&#8217;s constructor.<br \/>\nAssuming the injected service is called <code>myJobQueue<\/code>, the controller can enqueue a job to run in the background with :<\/p>\n<pre><code>\nIBackgroundTaskQueue _myJobQueue\n\npublic MyController(IBackgroundTaskQueue myJobQueue)\n{\n    _myJobQueue=myJobQueue;\n}\n\n\npublic void ConfirmOrder(...)\n{\n    ...\n    if (!tipo.Equals(\"MENU\"))\n    {\n        var ordId=int.Parse(orderID);\n    \n  \n  _myJobQueue.QueueBackgroundWorkItem(ct=&gt;EmailHelper.SendRiepilogoAsync(piva,ordId )); \n}\n<\/code><\/pre>\n<p><code>async void<\/code> should only be used for asynchronous event handlers. That&#8217;s not what <code>SendRiepilogo<\/code> is. <code>async void<\/code> methods can&#8217;t be awaited, they are essentially fire-and-forget methods that may never run, as the application doesn&#8217;t know it has to await them. The <em>correct<\/em> syntax should be :<\/p>\n<pre><code>public static async Task SendRiepilogoAsync(string piva, int idOrdine)\n{\n...\n}\n<\/code><\/pre>\n<p>The rest of the documentation example can be used as-is.<\/p>\n<p><strong>Simplifying the service<\/strong><\/p>\n<p>Instead of a generic queued service that runs any available job, you could create a queue that accepts specific message classes only, only an address and order ID, and have the <em>service<\/em> do the job of retrieving any data and sending the email. Essentially, <code>SendRiepilogoAsync<\/code> becomes part of the background service. This allows creating services that could eg batch emails, send several emails concurrently, apply throttling etc.<\/p>\n<p>This would allow reusing expensive resources or perform expensive operations just once, eg create the SmptClient and authenticate before starting to process queue messages<\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\"><\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved How to make a IHostingService to send emails on order confirm? <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] A background (hosted) service is a completely different service, using its own thread to do its job. You can&#8217;t have your controller &#8220;run&#8221; something on that service, you have to tell it what to do, and have it do it. The Background tasks with hosted services section in the docs shows two different ways &#8230; <a title=\"[Solved] How to make a IHostingService to send emails on order confirm?\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/\" aria-label=\"More on [Solved] How to make a IHostingService to send emails on order confirm?\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[324],"class_list":["post-12998","post","type-post","status-publish","format-standard","hentry","category-solved","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] How to make a IHostingService to send emails on order confirm? - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] How to make a IHostingService to send emails on order confirm? - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] A background (hosted) service is a completely different service, using its own thread to do its job. You can&#8217;t have your controller &#8220;run&#8221; something on that service, you have to tell it what to do, and have it do it. The Background tasks with hosted services section in the docs shows two different ways ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-02T11:54:05+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] How to make a IHostingService to send emails on order confirm?\",\"datePublished\":\"2022-10-02T11:54:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/\"},\"wordCount\":340,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"c++\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/\",\"name\":\"[Solved] How to make a IHostingService to send emails on order confirm? - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-10-02T11:54:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] How to make a IHostingService to send emails on order confirm?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] How to make a IHostingService to send emails on order confirm? - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] How to make a IHostingService to send emails on order confirm? - JassWeb","og_description":"[ad_1] A background (hosted) service is a completely different service, using its own thread to do its job. You can&#8217;t have your controller &#8220;run&#8221; something on that service, you have to tell it what to do, and have it do it. The Background tasks with hosted services section in the docs shows two different ways ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/","og_site_name":"JassWeb","article_published_time":"2022-10-02T11:54:05+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] How to make a IHostingService to send emails on order confirm?","datePublished":"2022-10-02T11:54:05+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/"},"wordCount":340,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["c++"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/","url":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/","name":"[Solved] How to make a IHostingService to send emails on order confirm? - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-10-02T11:54:05+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-how-to-make-a-ihostingservice-to-send-emails-on-order-confirm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] How to make a IHostingService to send emails on order confirm?"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/12998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=12998"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/12998\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=12998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=12998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=12998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}