欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET分布式Orleans計(jì)時器和提醒功能實(shí)現(xiàn)

 更新時間:2024年03月26日 10:05:38   作者:chester·chen  
Timer是一種用于創(chuàng)建定期粒度行為的機(jī)制,與標(biāo)準(zhǔn)的.NET System.Threading.Timer類相似,Orleans 的 Timer允許在一段時間后執(zhí)行特定的操作,或者在特定的時間間隔內(nèi)重復(fù)執(zhí)行操作,這篇文章主要介紹了.NET分布式Orleans?計(jì)時器和提醒,需要的朋友可以參考下

Timer是什么

Timer 是一種用于創(chuàng)建定期粒度行為的機(jī)制。

與標(biāo)準(zhǔn)的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間后執(zhí)行特定的操作,或者在特定的時間間隔內(nèi)重復(fù)執(zhí)行操作。

它在分布式系統(tǒng)中具有重要作用,特別是在處理需要周期性執(zhí)行的任務(wù)時非常有用。

Timer的注意事項(xiàng)

  • 計(jì)時器回調(diào)不會改變空閑激活的狀態(tài),不能用于推遲其他空閑激活的停用。

  • Grain.RegisterTimer 中傳遞的時間段取決于上次回調(diào)完成到下一次回調(diào)開始的時間,因此回調(diào)的頻率會受到執(zhí)行時間的影響。

  • 每次 asyncCallback 調(diào)用都會作為單獨(dú)輪次的激活,并且不會與同一激活的其他輪次同時運(yùn)行。

代碼示例

public class PlayerGrain : Grain, IPlayerGrain
{
    public Task<string> GetPlayerInfo()
    {
        var timer = RegisterTimer(DoSomething, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
        return Task.FromResult($"Player ID: {this.GetPrimaryKeyString()}");
    }
    private async Task DoSomething(object state)
    {
        // 在這里定義要執(zhí)行的操作
        await Task.Delay(5000);
        Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} Timer Triggered: {this.GetPrimaryKeyString()}");
    }
}

Reminder與Timer的區(qū)別

提醒(Reminder)是一種在 Orleans 中用于處理周期性任務(wù)的機(jī)制,與計(jì)時器類似,但具有一些重要區(qū)別:

  • 永久性觸發(fā):提醒是永久性的,除非明確取消,否則會在幾乎所有情況下(包括部分或完整群集重啟)繼續(xù)觸發(fā)。

  • 定義的持久性:提醒的定義會寫入存儲,但具體的事件及其時間不會。這意味著如果群集在提醒應(yīng)該觸發(fā)時關(guān)閉,它將錯過該提醒,只會在下次提醒的觸發(fā)時被重新激活。

  • 關(guān)聯(lián)于Grain:提醒是與Grain關(guān)聯(lián)的,而不是與任何特定激活Grain。如果提醒的觸發(fā)時,粒度沒有與之關(guān)聯(lián)的激活,則會創(chuàng)建該Grain,并在下次觸發(fā)時重新激活。

  • 消息傳遞:提醒的傳遞通過消息發(fā)生,受到與所有其他粒度方法相同的交錯語義的約束。

  • 適用場景:提醒通常不適用于高頻計(jì)時器,其周期應(yīng)該以分鐘、小時或天為單位。相比之下,提醒更適用于周期性任務(wù)的處理,例如定期執(zhí)行清理任務(wù)或發(fā)送通知等。

如果想使用reminder,需要安裝nuget包

<PackageReference Include="Microsoft.Orleans.Reminders" Version="8.0.0" />

并開啟reminder

silBuilder.UseInMemoryReminderService();

Grain需要實(shí)現(xiàn)接口 IRemindable ,并使用this.RegisterOrUpdateReminder 注冊reminder

public interface IPlayerGrain : IGrainWithStringKey, IRemindable
{
    Task<string> GetPlayerInfo();
}
public class PlayerGrain : Grain, IPlayerGrain
{
    public Task<string> GetPlayerInfo()
    {
        this.RegisterOrUpdateReminder("myReminder", TimeSpan.FromSeconds(5), TimeSpan.FromMinutes(1));
        return Task.FromResult($"Player ID: {this.GetPrimaryKeyString()}");
    }
    public Task ReceiveReminder(string reminderName, TickStatus status)
    {
        Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} Reminder Triggered: {this.GetPrimaryKeyString()}");return Task.CompletedTask;
    }
}

Timer 和 Reminder 場景

使用定時器(Timer)的場景:

  • 對激活狀態(tài)的要求不高:如果激活被停用或發(fā)生故障時,計(jì)時器停止運(yùn)行不會產(chǎn)生重大影響,或者這種行為可接受。
  • 較小的分辨率:如果需要較小的時間間隔來執(zhí)行任務(wù),例如以秒或分鐘為單位。
  • 計(jì)時器回調(diào)與 Grain 生命周期相關(guān):如果需要在 Grain 的生命周期事件(如OnActivateAsync())或者調(diào)用粒度方法時啟動計(jì)時器回調(diào)。

使用提醒(Reminder)的場景:

  • 持久性要求:當(dāng)需要確保周期性行為在激活和任何故障中都存在時,提醒是一個更好的選擇。因?yàn)樘嵝咽怯谰眯缘?,除非明確取消,否則會在幾乎所有情況下繼續(xù)觸發(fā)。
  • 較大的時間間隔:當(dāng)執(zhí)行不常見的任務(wù),例如以分鐘、小時或天為單位的周期性任務(wù)時,提醒更為適合。

依賴注入創(chuàng)建Timer與Reminder

將 ITimerRegistry 或 IReminderRegistry 注入粒度的構(gòu)造函數(shù)中,也可以創(chuàng)建Timer與Reminder

public PlayerGrain(ITimerRegistry timerRegistry,
IReminderRegistry reminderRegistry,
IGrainContext grainContext)
{
    timerRegistry.RegisterTimer(grainContext,DoSomething,null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
    reminderRegistry.RegisterOrUpdateReminder(grainContext.GrainId,"testreminder",TimeSpan.FromSeconds(5), TimeSpan.FromMinutes(1));
}

到此這篇關(guān)于.NET分布式Orleans - 4 - 計(jì)時器和提醒的文章就介紹到這了,更多相關(guān).NET計(jì)時器和提醒內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • asp.net core MVC 過濾器之ActionFilter過濾器(2)

    asp.net core MVC 過濾器之ActionFilter過濾器(2)

    這篇文章主要為大家詳細(xì)介紹了asp.net core MVC過濾器之ActionFilter過濾器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 淺析JSON序列化與反序列化

    淺析JSON序列化與反序列化

    以下是對JSON序列化與反序列化進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • .Net防sql注入的幾種方法

    .Net防sql注入的幾種方法

    這篇文章主要給大家總結(jié)介紹了關(guān)于.Net防sql注入的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用.Net具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • asp.net jquery無刷新分頁插件(jquery.pagination.js)

    asp.net jquery無刷新分頁插件(jquery.pagination.js)

    采用Jquery無刷新分頁插件jquery.pagination.js 實(shí)現(xiàn)無刷新分頁效果:本示例Handler中采用StringBuilder的append方法追加HTML,小數(shù)據(jù)量可以,但是大數(shù)據(jù)或是布局常變,建議返回JSON格式的數(shù)據(jù),性能和靈活性更好,望使用者好好把握
    2013-01-01
  • .NET?Core分布式鏈路追蹤框架的基本實(shí)現(xiàn)原理

    .NET?Core分布式鏈路追蹤框架的基本實(shí)現(xiàn)原理

    這篇文章介紹了.NET?Core分布式鏈路追蹤框架的基本實(shí)現(xiàn)原理,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • ASP.NET簡化編輯界面解決思路及實(shí)現(xiàn)代碼

    ASP.NET簡化編輯界面解決思路及實(shí)現(xiàn)代碼

    簡化用戶操作界面,添加功能一般沒法簡化,但是如果是在GridView做顯示,編輯,更新與刪除,會讓用戶在編輯,需要點(diǎn)擊編輯銨鈕,再進(jìn)行編輯,或是取消編輯,下面是改進(jìn)的方法做了演示動畫,感興趣的朋友可以了解下
    2013-01-01
  • asp.net C#實(shí)現(xiàn)解壓縮文件的方法

    asp.net C#實(shí)現(xiàn)解壓縮文件的方法

    這篇文章主要介紹了asp.net C#實(shí)現(xiàn)解壓縮文件的方法,分別講述了三種不同的實(shí)現(xiàn)方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-11-11
  • ASP.NET使用WebService實(shí)現(xiàn)天氣預(yù)報功能

    ASP.NET使用WebService實(shí)現(xiàn)天氣預(yù)報功能

    這篇文章主要為大家詳細(xì)介紹了ASP.NET使用WebService實(shí)現(xiàn)天氣預(yù)報功能的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-08-08
  • sqlserver 批量數(shù)據(jù)替換助手V1.0版發(fā)布

    sqlserver 批量數(shù)據(jù)替換助手V1.0版發(fā)布

    前段時間網(wǎng)站被掛馬,數(shù)據(jù)庫表中很多文本字段都被加上了一段js腳本。修復(fù)完程序漏洞之后便開始著手清理這些被注入的數(shù)據(jù),其間參考了一些網(wǎng)上的方法,大都是寫一個存儲過程進(jìn)行一個表一個表逐一清理。
    2011-10-10
  • VS2015中C#版本6.0的新特性 你需要知道

    VS2015中C#版本6.0的新特性 你需要知道

    VS2015內(nèi)置的C#版本為6.0,提供了一些新特性,這篇文章主要為大家詳細(xì)介紹了VS2015中C#版本6.0的8種新特性,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評論