引用异步任务而不启动它
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
它。
我有一个 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
它。