考慮效率用定時器還是用非同步延時

2021-10-23 20:36:08 字數 1733 閱讀 3337

1、有這麼乙個需求,我需要每隔10秒鐘處理一件事情,比較耗時,可能會處理兩三秒。

最開始,我是使用的定時器,定時10秒處理一次。

這就出現了乙個問題,定時一次執行,執行兩三秒之後結束,然後只過了六七秒,又再次啟動了(定時器固定間隔10秒)

這還算簡單的,還有一種可能,定時處理的**,處理不止兩三秒,甚至10秒都處理不完,定時器會再次啟動,這時候執行了兩個一樣的邏輯,這個還不能用加鎖處理,不然上一次**執行完,鎖一解開馬上執行下一次,太坑。。。

後來我換了個想法,用非同步:

async void loop()

}搞了個死迴圈。

這個倒是可以了,執行一次不管用了十秒還是二十秒,下次啟動都是在休息10秒後執行。。。

但是,我想知道,這個思路有沒有問題。。。延遲10秒的時候,會不會消耗什麼資源,會不會比定時器效率低很多。。

搞了個死迴圈。

這個倒是可以了,執行一次不管用了十秒還是二十秒,下次啟動都是在休息10秒後執行。。。

但是,我想知道,這個思路有沒有問題。。。延遲10秒的時候,會不會消耗什麼資源,會不會比定時器效率低很多。。

async void method()

}不要使用task.delay(10*1000);這些,浪費資源

await task.delay(10*1000); 不然他只是乙個task

這個不可以用ajax嗎 jquery很容易實現吧 但我沒接觸過winform

如果ajax返回狀態完成 則x=10 計時遞迴

每隔10秒鐘處理一件事情,比較耗時,可能會處理兩三秒

-》定時器事件中處理非同步也是乙個道理,為什麼要使用死迴圈while,不推薦。

用執行緒 解決呀 timer  裡面有執行緒的掛起。。。 

timer裡面另起thread

這樣timer就不吃時間了,當然有幾納秒差別 

如果timer走的是中斷,那麼效率是你開執行緒的n倍。當然沒有仔細研究過!!

backgroundworker元件,不是有乙個執行處理完之後的事件麼,在這裡整個間隔10秒也可以啊

處理** 開始 關閉 定時器 , 處理** 結束 再 設定 定時器

唉,每次都能把問題丟到莫名其妙的地方

假設一群人上廁所,只有乙個坑。 那麼結果是什麼,進去-----脫褲子--***x--穿褲子-沖水--出去--下乙個人進來

好了,現在穿褲子+沖水要10秒,僅此而已。

所以人家 

await task.delay(10*1000) //沖水

retrun也好,continue也罷 //都是出去

有問題麼,正常操作了。

行了,別扯啥執行緒,backgroundworker,timer,threadpool.queueuserworkitem 了,乙個正常無比的操作,卻不知道跑**去了

當然可以,還是「上一次的結尾「沖水10秒」

同樣的道理 「非同步通知」--------一樣。沖水10秒後,出門,告訴下一位你可以進來了。

可以看到這麼弄都行,無非是「回」字n種用法,所以重要的不是你用什麼**,用什麼回字,重要的是你怎麼按邏輯寫出最符合人類思維的東西,「回」字那是機器思維,「推「還是」敲」得是最後的潤色。不是**的核心

感覺你想要的邏輯是上一次任務執行完10秒之後再啟動乙個新任務 所以應該有乙個標誌去判斷當前任務的狀態  之後有個

論壇發帖機

迴圈去判斷什麼時候啟動任務

task.run(() => );

private void looprefreshlist()}}

}

高效蜂鳴器驅動法 用定時器掃瞄代替軟體延時

上班跟上學果然不一樣,就比如乙個蜂鳴器的驅動,學生時 蜂鳴器的程式倒也直觀 pwm set 0x0a,0x80 pwm0輸出4.24khz,占空比50 delay ms 200 延時200ms pwm set 0x0a,0 pwm0輸出占空比為0 這樣就是乙個簡單的蜂鳴器響一聲的程式 約200ms ...

用PHP實現定時器功能

以前只知道用js能實現定時器功能,而且很方便,但今天做專案過程中要實現個功能模組,做到其中某部分時,心想要是可以通過php來實現個定時器功能就好了,於是在網上找了找,發現用gnore user abort 函式配合set time limit 函式 和乙個死迴圈就可以實現類似功能。雖然專案最終未使用...

linux 定時器怎麼用 crontab 基礎

建立定時器 檢視 crontab l 建立 crontab e 每分鐘輸出一次當前時間 echo date demo.log 檢視定時 cat etc crontab shell bin bash path sbin bin usr sbin usr bin mailto for details s...