引用异步任务而不启动它

时间:2018-10-22 19:31:05

标签: c# asynchronous task-parallel-library

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

所以说:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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