防止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
表示可等待操作的现在或将来的结果。如果该任务已经启动,这很有趣——但它与接收任务的代码无关。
如果你还不想开始某事,你可能应该传递一个Action
。您可以通过Task.Run
从Action
创建Task
。或者您可以简单地通过action()
或action. invoke()`调用操作。
如果你想运行的是显式异步:你可以传递Func<Task>
。同样,如果您想要一个表示最终状态的Task
,您可以使用Task.Run
启动这样一个委托。或者你可以直接调用它
(是否将其传递给Invoke()
或传递给Task.Run()
取决于您是否希望它使用您的线程中的任何一个)
DoSomething()
时,你开始运行代码。Task.Delay
调度了一个定时器,然后代码继续进入TaskHolder
。