Я пытаюсь создать удобный метод расширения для Action, чтобы в основном запускать это действие с задержкой: пока мое расширение выглядит так
public static void DelayAction(this Action DelayedAction, int millisecondDelay, CancellationToken Token)
{
Task t = Task.Factory.StartNew(() => { Thread.Sleep(millisecondDelay); }, Token, TaskCreationOptions.None, TaskScheduler.Default);
t.ContinueWith(_ => DelayedAction, Token, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
}
У меня есть функция, которую я вызываю и которая в свою очередь используетэти расширения
private void DelayTask(Action ActiontoDelay, int millisecondDelay)
{
ActiontoDelay.DelayAction(millisecondDelay, _TokenSource.Token);
}
Которые я называю так:
DelayTask(() => { _SomeFunction(SomeArgs); }, 1500);
Но все это, кажется, падает в целом, и действие никогда не запускается.Куда я иду не так?
Редактировать 17-11-11 23:00:
Я удалил универсальный метод расширения, так как он не относится к этому примеру.
Также публикуем комментарий здесьпоскольку он не форматирует код четко в комментариях
Если вместо вызова
DelayTask(() => { _SomeFunction(SomeArgs); }, 1500);
я делаю это напрямую:
Task t = Task.Factory.StartNew(() => { Thread.Sleep(1500); }, Token, TaskCreationOptions.None, TaskScheduler.Default);
t.ContinueWith(() => { _SomeFunction(SomeArgs); }, Token, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
Работает нормально (извинитеесли там есть какая-то синтаксическая ошибка, я сделал это из памяти) Так что я полагаю, что моя проблема заключается в обработке действия, которое ответ Ника Батлера не дает