我不是c#的专家,也不是TPL的新手......
我有很多不同的任务,我想要开始,有些依赖于其他人。此外,我想从xml配置文件中决定是否必须执行某些任务,然后根据不执行的任务执行的任务不得等到执行此任务。
使用所有这些的if语句使我的代码过于复杂,所以我想做这样的事情:
static Task<bool> StartTask( List<Task<bool>> dependencies,
Func<bool> action)
{
List<Task<bool>> filtered = new List<Task<bool>>();
foreach (Task<bool> t in dependencies)
{
if (t != null)
{
filtered.Add(t);
}
}
Task<bool> task;
if (filtered.Count == 0)
{
task = (Task<bool>)tf.StartNew(action);
}
else
{
task = (Task<bool>)tf.ContinueWhenAll(filtered.ToArray(), ts => action);
}
return task;
}
所以我的想法是在开始时生成每个任务的依赖项列表,然后如果没有执行任何任务,则过滤空任务列表......如果没有执行任务的祖先,我调用StartNew而不是ContinueWhenAll .....这样我用依赖关系设置列表并以通用方式调用所有任务。
但我不知道这是否可行以及如何在c#中进行。有什么想法??
所有任务都返回bool但有不同的参数。
哈维尔
答案 0 :(得分:1)
我这样写:
await Task.WhenAll(dependencies.Where(t => t != null));
await Task.Run(() => action());
我将Where(t => t != null)
部分作为参数验证,并将传递空任务视为非法。