{"id":28028,"date":"2019-11-20T00:00:00","date_gmt":"2019-11-19T23:00:00","guid":{"rendered":"https:\/\/blexin.com\/?p=28028"},"modified":"2021-02-11T15:54:04","modified_gmt":"2021-02-11T14:54:04","slug":"interrompere-i-job-asincroni-di-quartz-3","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/","title":{"rendered":"Interrompere i Job asincroni di Quartz 3"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"28029\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/attachment\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-28029\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Durante il consueto refactoring su un progetto di un nostro cliente, abbiamo convertito il precedente codice sincrono in una versione asincrona, sfruttando i Task e il pattern&nbsp;<strong>async-await<\/strong>&nbsp;del framework .NET. Sull\u2019argomento vi consiglio di leggere l\u2019<a href=\"https:\/\/www.blexin.com\/it-IT\/Article\/Blog\/Async-e-await-in-applicazioni-reali-60\" rel=\"noreferrer noopener\" target=\"_blank\">articolo<\/a>&nbsp;del mio collega Francesco Vastarella.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uno dei motivi della richiesta era relativo ad una non corretta risposta dell\u2019applicazione alle richieste di shutdown, con conseguente fallimento dei primi tentativi di deploy di nuove versioni.<br>Nel cercare i motivi di questo lento spegnimento, ci siamo accorti che alcune operazioni rimanevano in \u201cattesa\u201d proprio dopo la richiesta di spegnimento. Abbiamo pensato di sfruttare i&nbsp;<strong>CancellationToken<\/strong>&nbsp;del .NET Framework per gestire le richieste di stop dei Job.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il primo passo \u00e8 stato l\u2019aggiornamento della versione della libreria Quartz. Per chi non la conoscesse, Quartz \u00e8 una libreria che permette di gestire job schedulati, eseguiti in background. Problema superato se utilizzate nelle vostre applicazioni .NET Core, grazie agli&nbsp;<a href=\"https:\/\/docs.microsoft.com\/it-it\/aspnet\/core\/fundamentals\/host\/hosted-services?view=aspnetcore-3.0&amp;tabs=visual-studio\" target=\"_blank\" rel=\"noreferrer noopener\">Hosted Services<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nella sua versione 3.0, Quartz ha introdotto la possibilit\u00e0 di gestire i job in modo asincrono. Se non conoscete nel dettaglio la libreria, un Job non \u00e8 altro che una classe che implementa l\u2019interfaccia<strong>&nbsp;IJob<\/strong>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nnamespace Quartz\u00a0\u00a0\u00a0 \n{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0public interface IJob\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Task Execute(JobExecutionContext context);\n\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0 \n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Se in passato avete utilizzato la versione 2.0 di Quartz, ricorderete sicuramente che per poter interrompere un Job, lo stesso doveva implementare l\u2019interfaccia&nbsp;<strong>IInterruptableJob<\/strong>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic interface IInterruptableJob\u00a0\u00a0\u00a0\u00a0\u00a0 \n{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0void Interrupt();\n}\u00a0\u00a0 \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">L\u2019implementazione dell\u2019interruzione di un Job era quindi libera e in alcuni esempi mi \u00e8 capitato di vedere utilizzato un bel&nbsp;<strong>Thread.Abort()<\/strong>. Si tratta di un Approccio assolutamente da evitare, in quanto si rischia di lasciare l\u2019applicazione in uno stato non gestito. Questo metodo non fa altro che sollevare un\u2019eccezione di tipo&nbsp;<strong>ThreadAbortException<\/strong>&nbsp;(che non pu\u00f2 essere soppressa con un catch perch\u00e9 \u00e8 automaticamente rilanciata) che stoppa immediatamente il thread in corso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ci\u00f2 potrebbe innescare una serie di problemi, come ad esempio avere qualche oggetto<strong>&nbsp;IDisposable<\/strong>&nbsp;su cui non si \u00e8 riusciti a chiamare&nbsp;<em>Dispose<\/em>&nbsp;perch\u00e9 presente in un blocco&nbsp;<em>finally<\/em>&nbsp;che non \u00e8 stato raggiunto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con la nuova versione di Quartz questa interfaccia \u00e8 sparita. Adesso, l\u2019interruzione di un Job viene richiesta tramite lo&nbsp;<strong>Scheduler<\/strong>, l\u2019API principale della libreria che gestisce l\u2019esecuzione e la schedulazione dei Job:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nvar scheduler = await factory.GetScheduler();\nawait scheduler.Start();\n\u00a0\nIJobDetail job = JobBuilder.Create&lt;hellojob&gt;()\u00a0 \n\u00a0\u00a0\u00a0\u00a0.WithIdentity(&quot;myJob&quot;, &quot;group1&quot;)\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0.Build();\n\u00a0\nITrigger trigger = TriggerBuilder.Create()\u00a0 \n\u00a0\u00a0\u00a0\u00a0.WithIdentity(&quot;myTrigger&quot;, &quot;group1&quot;)\u00a0 \n\u00a0\u00a0\u00a0\u00a0.StartNow() \n\u00a0\u00a0\u00a0\u00a0.WithSimpleSchedule(x =&gt; \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0x .WithRepeatCount(1).WithIntervalInSeconds(40)).Build();\n\u00a0\nawait scheduler.ScheduleJob(job, trigger);\n\u00a0\n\/\/ Configure the cancellation of the schedule job with jobkey\nawait Task.Delay(TimeSpan.FromSeconds(1));\nawait scheduler.Interrupt(job.Key);\n&lt;\/hellojob&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Chi ha gi\u00e0 lavorato con la programmazione asincrona, noter\u00e0 subito che in questo esempio manca un&nbsp;<strong>CancellationToken<\/strong>. Come possiamo utilizzarne uno per cancellare eventuali altri Task chiamati dal nostro Job?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il pattern utilizzato per l\u2019utilizzo del CancellationToken nel .NET framework consiste di 4 passi:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Istanziare un oggetto&nbsp;<strong>CancellationTokenSource<\/strong>, che gestisce ed invia notifiche di cancellazione ai singoli Token<\/li><li>Passare il token ritornato dalla propriet\u00e0&nbsp;<strong>CancellationTokenSource.Token&nbsp;<\/strong>ad ogni Task di cui si voglia gestire la cancellazione<\/li><li>Predisporre un meccanismo con il quale ogni Task risponda alla cancellazione<\/li><li>Richiamare il metodo&nbsp;<strong>CancellationToken.Cancel<\/strong>&nbsp;per inviare una richiesta di cancellazione<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Questo pattern viene implementato dalla libreria di Quartz internamente al&nbsp;<em>context<\/em>&nbsp;del Job. L\u2019invocazione dell\u2019<em>interrupt<\/em>&nbsp;dallo scheduler non fa altro che chiamare un&nbsp;<strong>Cancel()<\/strong>&nbsp;del context del Job che a sua volta richiama il&nbsp;<strong>Cancel()<\/strong>&nbsp;del&nbsp;<strong>CancellationTokenSource<\/strong>&nbsp;istanziato. Potete osservare questo meccanismo direttamente nel codice sorgente della libreria presente su GitHub:&nbsp;<a href=\"https:\/\/github.com\/quartznet\/quartznet\/blob\/master\/src\/Quartz\/Core\/QuartzScheduler.cs\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/quartznet\/quartznet\/blob\/master\/src\/Quartz\/Core\/QuartzScheduler.cs<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A questo punto non ci resta che propagare il&nbsp;<em>cancellation token<\/em>&nbsp;del Job a tutti i Task di cui vogliamo gestire la cancellazione:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic async Task Execute(IJobExecutionContext context) {\n\u00a0\u00a0\u00a0\u00a0await MyAsyncTask(context.CancellationToken);\u00a0 \n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Spero di avervi dato qualche spunto interessante da utilizzare nei vostri progetti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al prossimo articolo!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Vediamo come \u00e8 cambiata l\u2019API di Quartz 3.0 e come interrompere i nuovi Job asincroni<\/p>\n","protected":false},"author":196716246,"featured_media":28029,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637419,688637382],"class_list":["post-28028","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-asp-net","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Interrompere i Job asincroni di Quartz 3 - Blexin<\/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:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Interrompere i Job asincroni di Quartz 3 - Blexin\" \/>\n<meta property=\"og:description\" content=\"Vediamo come \u00e8 cambiata l\u2019API di Quartz 3.0 e come interrompere i nuovi Job asincroni\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-19T23:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-02-11T14:54:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Francesco de Vicariis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Francesco de Vicariis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/\"},\"author\":{\"name\":\"Francesco de Vicariis\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\"},\"headline\":\"Interrompere i Job asincroni di Quartz 3\",\"datePublished\":\"2019-11-19T23:00:00+00:00\",\"dateModified\":\"2021-02-11T14:54:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/\"},\"wordCount\":595,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"Asp.net\",\"C#\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/\",\"name\":\"Interrompere i Job asincroni di Quartz 3 - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2019-11-19T23:00:00+00:00\",\"dateModified\":\"2021-02-11T14:54:04+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/interrompere-i-job-asincroni-di-quartz-3\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Interrompere i Job asincroni di Quartz 3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\",\"name\":\"Francesco de Vicariis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g\",\"caption\":\"Francesco de Vicariis\"},\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/author\\\/francesco-devicariisblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Interrompere i Job asincroni di Quartz 3 - Blexin","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:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/","og_locale":"it_IT","og_type":"article","og_title":"Interrompere i Job asincroni di Quartz 3 - Blexin","og_description":"Vediamo come \u00e8 cambiata l\u2019API di Quartz 3.0 e come interrompere i nuovi Job asincroni","og_url":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/","og_site_name":"Blexin","article_published_time":"2019-11-19T23:00:00+00:00","article_modified_time":"2021-02-11T14:54:04+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Francesco de Vicariis","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Francesco de Vicariis","Tempo di lettura stimato":"3 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/"},"author":{"name":"Francesco de Vicariis","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f"},"headline":"Interrompere i Job asincroni di Quartz 3","datePublished":"2019-11-19T23:00:00+00:00","dateModified":"2021-02-11T14:54:04+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/"},"wordCount":595,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1","keywords":["Asp.net","C#"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/","url":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/","name":"Interrompere i Job asincroni di Quartz 3 - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1","datePublished":"2019-11-19T23:00:00+00:00","dateModified":"2021-02-11T14:54:04+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/interrompere-i-job-asincroni-di-quartz-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Interrompere i Job asincroni di Quartz 3"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f","name":"Francesco de Vicariis","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g","caption":"Francesco de Vicariis"},"url":"https:\/\/blexin.com\/it\/author\/francesco-devicariisblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/e6f1b9f0-a630-49df-8a0f-835bb4dbb8c1.png?fit=1024%2C608&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7i4","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716246"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=28028"}],"version-history":[{"count":7,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28028\/revisions"}],"predecessor-version":[{"id":32290,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28028\/revisions\/32290"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/28029"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=28028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=28028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=28028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}