この投稿に基づいていくつかの再試行ロジックを実装しようとしています (ただしタスクを使用) 。再試行ロジックを作成する最もクリーンな方法は?
再試行ロジックのアイデアは、一定時間後にキャンセルをトリガーする 2 番目のタスクを実装することです。
void Main()
{
RetryAction(() => Sleep(), 500);
}
public static void RetryAction(Action action, int timeout)
{
var cancelSource = new CancellationTokenSource();
cancelSource.CancelAfter(timeout);
Task.Run(() => action(), cancelSource.Token);
}
public static void Sleep()
{
System.Threading.Thread.Sleep(5000);
"done".Dump();
}
上記はlinqPadのスニペットです(したがって、「完了」.Dump())
CancelAfter が機能しない理由は何ですか?