.NETのSystem.Threading.Tasks
空間に、TaskCompletionSource<T>
っていうのがあります。
TaskCompletionSource(TResult) クラス (System.Threading.Tasks)
これを使うと、こういうコードが書けます。
public Task Sleep(int milliseconds) { var source = new TaskCompletionSource<bool>(); var timer = new Timer(_ => { source.SetResult(true); }, null, milliseconds, Timeout.Infinite); return source.Task; }
このコードは、実際はTask.Delay
と書けばいいので特に意味はないですが、外からTaskをCompleteできる便利なやつです。
最近のECMAScriptだとこう書けるあれです。
function sleep(millis) { return new Promise(done => { setTimeout(done, millis); }); }
普段使わないけど、1年に1回ぐらい使うことがあって思い出せないのでメモです。