引用异步任务而不启动它?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (28)

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

所以我们说:

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在以后执行。

扫码关注云+社区

领取腾讯云代金券