阻止任务启动

时间:2016-09-21 11:51:45

标签: c# asynchronous task

TaskHolder具有Task类型的属性。我将Task作为参数传递给构造函数,它立即启动。有没有办法阻止它开始?

public class Worker
{
    public class TaskHolder
    {
        public TaskHolder(Task objective)
        {
            Objective = objective;
        }

        public Task Objective { get; set; }
    }

    public async Task DoSomething()
    {
        await Task.Delay(5000);
        Debugger.Break(); // Task starts, so debugger stops here!
        // Is there a way to prevent it from start?
    }

    [Test]
    public async Task TempTest()
    {
        // programm starts here:
        var t1 = new TaskHolder(DoSomething());
        await Task.Delay(10000);
    }
}

1 个答案:

答案 0 :(得分:4)

Task代表等待行动的现在或未来结果。如果该任务已经开始,那很有意思 - 但它与接收任务的代码无关。

如果你还不想开始做某事,你应该传递一个Action。您可以通过TaskAction创建Task.Run。或者您可以通过action()或action.Invoke()`。

简单地调用操作

如果您要运行的内容是显式异步的:您可以传递Func<Task>。同样,如果您想要一个代表最终状态的Task.Run,您可以使用Task启动此类委托。或者你可以调用它。

(无论是Invoke()还是将其传递给Task.Run()取决于您是否希望将其线程用于其中任何一个)

最终,当您致电DoSomething()时, 启动了代码运行。 Task.Delay计划了一个计时器,然后代码继续进入TaskHolder