防止异步代码中的if()快捷方式

时间:2018-01-11 22:59:59

标签: c#

我有一组返回precision mediump float; uniform sampler2D texSampler2D; varying vec2 texCoord; void main() { gl_FragColor = texture2D(texSampler2D, texCoord); } 的方法,这些方法必须按顺序运行。我想知道任何任务是否都返回true。无论先前任务的结果如何,都必须运行所有任务。

我不能用a)

Task<boolean>

因为If优化,TaskMethod2()可能无法执行;或b)

var success =  (await TaskMethod1() || await TaskMethod2() //etc);  

因为它们必须按顺序运行。

这导致了以下尴尬和冗长的代码

var success = await Task.WhenAll(new[] { TaskMethod(), TaskMethod2() //etc});  

有没有人知道更优雅的方式,也许是使用ContinueWith?

1 个答案:

答案 0 :(得分:5)

为什么不简单:

var success =  (await TaskMethod1() | 
                await TaskMethod2() |
                /*etc.*/ );

||是短路的|是非短路版本。无论结果如何,左右操作数都将被评估。

如果您无论结果如何都需要运行所有任务,请使用|