动作延迟扩展方法不起作用

Aku*_*uma 4 c# extension-methods multithreading action task

我正在尝试为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());
    }
Run Code Online (Sandbox Code Playgroud)

我有一个函数我调用它反过来使用这些扩展

    private void DelayTask(Action ActiontoDelay, int millisecondDelay)
    {
        ActiontoDelay.DelayAction(millisecondDelay, _TokenSource.Token);
    } 
Run Code Online (Sandbox Code Playgroud)

我称之为:

    DelayTask(() => { _SomeFunction(SomeArgs); }, 1500);
Run Code Online (Sandbox Code Playgroud)

但这一切似乎都落到了整体而且行动从未触发过.我哪里错了?

编辑17-11-11 2300hrs:

我删除了通用扩展方法,因为它与此示例无关.

此处也发表评论,因为它没有在评论中清楚地格式化代码

如果不是通话

DelayTask(() => { _SomeFunction(SomeArgs); }, 1500); 
Run Code Online (Sandbox Code Playgroud)

我直接这样做:

Task t = Task.Factory.StartNew(() => { Thread.Sleep(1500); }, Token, TaskCreationOptions.None, TaskScheduler.Default); 
t.ContinueWith(() => { _SomeFunction(SomeArgs); }, Token, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); 
Run Code Online (Sandbox Code Playgroud)

它工作正常(对不起,如果有任何语法错误,我已经从内存中完成)所以我相信我的问题是在处理尼克巴特勒的答案逃避的行动

Nic*_*ler 5

您的继续是返回DelayedAction委托,而不是调用它:

t.ContinueWith(_ => DelayedAction(), Token, ...
Run Code Online (Sandbox Code Playgroud)