在我的.NET Core 2.1應(yīng)用程序中,我有一個(gè)從類繼承的服務(wù),BackgroundService它在一個(gè)新線程上啟動(dòng)一個(gè)長(zhǎng)時(shí)間運(yùn)行的服務(wù)。然后,該服務(wù)會(huì)訪問(wèn)一個(gè)作用域服務(wù),該服務(wù)從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)并發(fā)送一些電子郵件。我正在嘗試測(cè)試我對(duì)應(yīng)用程序正常關(guān)閉的處理,但在我的測(cè)試場(chǎng)景中遇到了一個(gè)奇怪的問(wèn)題。在閱讀了BackgroundService的 MSDN 博客條目后,提到了:“默認(rèn)情況下,取消令牌設(shè)置為 5 秒超時(shí),盡管您可以在使用 IWebHostBuilder 的 UseShutdownTimeout 擴(kuò)展構(gòu)建 WebHost 時(shí)更改該值。這意味著我們的服務(wù)預(yù)計(jì)將在 5 秒內(nèi)取消,否則會(huì)更多突然被殺。”以下代碼將該時(shí)間更改為 10 秒。WebHost.CreateDefaultBuilder(args).UseShutdownTimeout(TimeSpan.FromSeconds(10))...在我的Program.cs文件中,我已經(jīng)實(shí)現(xiàn)了這個(gè)擴(kuò)展方法(并且也嘗試使用該UseSettings方法)來(lái)嘗試擴(kuò)展我的超時(shí)關(guān)閉,如下所示:public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseSerilog() //.UseSetting(WebHostDefaults.ShutdownTimeoutKey, "20") .UseShutdownTimeout(TimeSpan.FromSeconds(20)) .Build();我在我的范圍服務(wù)中有一個(gè)斷點(diǎn),我試圖通過(guò)設(shè)置等待 10 秒并在線程等待時(shí)關(guān)閉控制臺(tái)來(lái)啟動(dòng)關(guān)閉來(lái)測(cè)試此超時(shí)的添加。然而,我發(fā)現(xiàn)在啟動(dòng)關(guān)機(jī) 5 秒后,應(yīng)用程序被殺死,好像它仍在使用默認(rèn)的 5 秒關(guān)機(jī)而不是新的 20 秒。這種行為的原因可能是什么?Log.Information("preparing to sleep thread for 10 seconds");//Thread.Sleep(10000);await Task.Delay(TimeSpan.FromSeconds(10));Log.Information("thread awakened");
延長(zhǎng)應(yīng)用程序關(guān)閉超時(shí)
www說(shuō)
2022-07-23 16:32:30