类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);
}
}
答案 0 :(得分:4)
Task
代表等待行动的现在或未来结果。如果该任务已经开始,那很有意思 - 但它与接收任务的代码无关。
如果你还不想开始做某事,你应该传递一个Action
。您可以通过Task
从Action
创建Task.Run
。或者您可以通过action()
或action.Invoke()`。
如果您要运行的内容是显式异步的:您可以传递Func<Task>
。同样,如果您想要一个代表最终状态的Task.Run
,您可以使用Task
启动此类委托。或者你可以调用它。
(无论是Invoke()
还是将其传递给Task.Run()
取决于您是否希望将其线程用于其中任何一个)
最终,当您致电DoSomething()
时, 启动了代码运行。 Task.Delay
计划了一个计时器,然后代码继续进入TaskHolder
。