tmytのらくがき

個人の日記レベルです

TaskCompletionSource<T>が覚えられない

.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回ぐらい使うことがあって思い出せないのでメモです。