引用异步任务而不启动它

Reference async Task without starting it

我有一个 class 需要一个需要在其他时刻异步调用的参数

所以让我们说:

public class UnitTask {
    public string Name{ get; set; }
    public Task JobToPefrorm { get; set;}
}

public static class GenericJobs {
    public static async Task ExecuteQuery(string query) {
        return await CodeToExecuteQueryAsync(query);
    }
}

所以这段代码背后的想法是生成多个 UnitTasks 并 运行 它们在代码的其他部分。这可能吗?到目前为止我试过这个:

var ut = new UnitTask();
ut.Name = "Get People";
ut.JobToPerform = GenericJobs.ExecuteQuery("select * from people");

但这会立即执行任务,而不仅仅是引用方法。

这不是直接可能的。最好的解决方法是创建工厂:

ut.JobToPerformFactory = () => GenericJobs.ExecuteQuery("select * from people");

并且JobToPerformFactory必须是Func<Task>类型。然后可以随时调用工厂来启动任务。将该任务存储在某处(可能在 ut 对象上)以获取该操作的句柄,并可能在以后 await 它。