一種延遲方法呼叫的實現

2021-09-08 10:34:42 字數 2287 閱讀 1544

原文:

一種延遲方法呼叫的實現

需求場景

**實現

定義任務介面

1inte***ce itask

2      4

bool isrunning  5

void start(); 6

void stop(); 7

void run(); 8

}定義延遲的資訊類

1class

lazyitem

2         

9             }

10public

string key 

11public action continue 

1213public lazyitem(

string key, 

int timeout, action continueaction)

14             

20         }

延遲的實現

1class

lazyinvoker : itask

2     

6         }

78public

bool isrunning 

910private

readonly concurrentdictionary<

string, lazyitem> _lazyactions = 

new concurrentdictionary<

string, lazyitem>();

1112public

void start()

13         

1718public

void stop()

19         

2223///

24///

檢測被延遲的任務,達到超時時間則觸發

25///

26///created by:marvin(2014/10/11 12:14)

27public

void run()

28         

34         }

3536private

void checkcontinue()

37         

50             }

51         }

5253///

54///

延遲工作

55///

56///the identifier.

57///the lazy timeout.

58///the continue action.

59///created by:marvin(2014/10/11 11:48)

60public

void lazydo(

string id, 

int lazytimeout, action continueaction)

61          , timeout : ", id, lazytimeout);

67                }

68             }

69         }

7071///

72///

取消任務

73///

74///the action key.

75///created by:marvin(2014/10/11 12:02)

76public

void cancel(

string actionkey)

77         」 had removed

", tmp.key);

84                 }

85             }

86         }

87     }

測試

1class

program

2     

2021private

static

void dosomething()

22         

25     }

執行結果如下:

一種延遲方法呼叫的實現

原文 一種延遲方法呼叫的實現 需求場景 實現 定義任務介面 1inte ce itask 2 4 bool isrunning 5 void start 6 void stop 7 void run 8 定義延遲的資訊類 1class lazyitem 2 9 10public string key...

Swift延遲載入的一種用途

有以下一種情況 我們試圖用cocoa的語音合成類nsspeechsynthesizer來完成對字串的朗讀,這很容易.但是我們還有乙個附加條件,就是在朗讀完一段文字後觸發乙個動作.這貌似也不難,我們只要遵守nsspeechsynthesizerdelegate協議即可,但是光這樣還不行,我們還必須將n...

呼叫方法的另一種方式

一般我們呼叫乙個類的方法,都是通過這個類本身 static方法 或者它的乙個例項去呼叫.比如 inte ce iservice void runservice icontext context class servicea iservice public override void runservi...