日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core 2.1 : 十一. 如何在后台运行一个任务

發(fā)布時(shí)間:2023/12/4 asp.net 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core 2.1 : 十一. 如何在后台运行一个任务 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

 在大部分程序中一般都會(huì)需要用到后臺(tái)任務(wù), 比如定時(shí)更新緩存或更新某些狀態(tài)。

一、應(yīng)用場(chǎng)景

  以調(diào)用微信公眾號(hào)的Api為例, 經(jīng)常會(huì)用到access_token,官方文檔這樣描述:“是公眾號(hào)的全局唯一接口調(diào)用憑據(jù),有效期目前為2個(gè)小時(shí),需定時(shí)刷新,重復(fù)獲取將導(dǎo)致上次獲取的access_token失效,建議公眾號(hào)開發(fā)者使用中控服務(wù)器統(tǒng)一獲取和刷新Access_token,其他業(yè)務(wù)邏輯服務(wù)器所使用的access_token均來自于該中控服務(wù)器,不應(yīng)該各自去刷新,否則容易造成沖突,導(dǎo)致access_token覆蓋而影響業(yè)務(wù)。”

  在這個(gè)場(chǎng)景中我們可以創(chuàng)建一個(gè)后臺(tái)運(yùn)行的服務(wù),按照access_token的有效期定時(shí)執(zhí)行去請(qǐng)求獲取新的access_token并存儲(chǔ),其他所有需要用到這個(gè)access_token的都到這個(gè)共有的access_token。

二、實(shí)現(xiàn)方式(一)

  ASP.NET Core 在2.0的時(shí)候就提供了一個(gè)名為IHostedService的接口,我們要做的只有兩件事:

    1. 實(shí)現(xiàn)它。

    2. 將這個(gè)接口實(shí)現(xiàn)注冊(cè)到依賴注入服務(wù)中。

  A. 實(shí)現(xiàn)IHostedService的接口

? ? ? ? ? ? 首先看一下這個(gè)IHostedService:

public interface IHostedService{ ? ? ?
? ? ? ?Task StartAsync(CancellationToken cancellationToken);
? ?
? ? ? ?Task StopAsync(CancellationToken cancellationToken);}

通過名字就可以看出來,一個(gè)是這個(gè)服務(wù)啟動(dòng)的時(shí)候做的操作,另一個(gè)則是停止的時(shí)候。

新建一個(gè)類?TokenRefreshService??實(shí)現(xiàn)?IHostedService?,如下面代碼所示:

既然是定時(shí)刷新任務(wù),那么就用了一個(gè)timer, 當(dāng)服務(wù)啟動(dòng)的時(shí)候啟動(dòng)它,由它定時(shí)執(zhí)行Refresh方法來獲取新的Token。

這里為了方便測(cè)試寫了5秒執(zhí)行一次, 實(shí)際應(yīng)用還是讀取配置文件比較好, 結(jié)果如下:

BackService.TokenRefreshService:Information: 17:23:30: Refresh Token!BackService.TokenRefreshService:Information: 17:23:35: Refresh Token!BackService.TokenRefreshService:Information: 17:23:40: Refresh Token!BackService.TokenRefreshService:Information: 17:23:45: Refresh Token!BackService.TokenRefreshService:Information: 17:23:50: Refresh Token!

?

三、實(shí)現(xiàn)方式(二)

?在 ASP.NET Core 2.1中, 提供了一個(gè)名為?BackgroundService??的類,它在?Microsoft.Extensions.Hosting?命名空間中,查看一下它的源碼:

可以看出它一樣是繼承自?IHostedService, IDisposable?, 它相對(duì)于是幫我們寫好了一些“通用”的邏輯, 而我們只需要繼承它并且實(shí)現(xiàn)它的?ExecuteAsync?即可。

也就是說,我們只需在這個(gè)方法內(nèi)寫下這個(gè)服務(wù)需要做的事即可。?

這樣上面的刷新Token的Service就可以改寫成這樣:

是不是簡(jiǎn)單了不少。(同樣這里為了方便測(cè)試寫了5秒執(zhí)行一次)

原文地址https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_11.html

.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的ASP.NET Core 2.1 : 十一. 如何在后台运行一个任务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。