防止Task启动

本文关键字:启动 Task 防止 | 更新日期: 2023-09-27 18:08:09

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);
    }
}

防止Task启动

Task表示可等待操作的现在或将来的结果。如果该任务已经启动,这很有趣——但它与接收任务的代码无关。

如果你还不想开始某事,你可能应该传递一个Action。您可以通过Task.RunAction创建Task。或者您可以简单地通过action()或action. invoke()`调用操作。

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

(是否将其传递给Invoke()或传递给Task.Run()取决于您是否希望它使用您的线程中的任何一个)

最后,当你调用DoSomething()时,开始运行代码。Task.Delay调度了一个定时器,然后代码继续进入TaskHolder