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

C# 防止异步代码中的if()快捷方式,c#,C#,我有一组方法返回一个任务,它必须按顺序运行。我想知道是否有任何任务返回true。无论前面任务的结果如何,都必须运行所有任务 我不能用a) 因为由于If优化,TaskMethod2()可能无法执行;或b) 因为它们必须按顺序运行 这导致了以下笨拙而冗长的代码 var success = await TaskMethod1(); if (await TaskMethod2()) success = true; // Repeated for all tasks 有人知道更优雅的方式吗,也许是

我有一组方法返回一个
任务
,它必须按顺序运行。我想知道是否有任何任务返回true。无论前面任务的结果如何,都必须运行所有任务

我不能用a)

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

因为它们必须按顺序运行

这导致了以下笨拙而冗长的代码

var success = await TaskMethod1();
if (await TaskMethod2()) 
  success = true; // Repeated for all tasks
有人知道更优雅的方式吗,也许是使用ContinueWith?

为什么不简单地:

var success =  (await TaskMethod1() | 
                await TaskMethod2() |
                /*etc.*/ );
|
是短路或,而
|
是非短路版本。无论左操作数和右操作数的结果如何,都将对其求值

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

为什么不简单地:

var success =  (await TaskMethod1() | 
                await TaskMethod2() |
                /*etc.*/ );
|
是短路或,而
|
是非短路版本。无论左操作数和右操作数的结果如何,都将对其求值


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

为什么不使用ContinueWith()来正确地链接它们?这毕竟是你有任务要做的事情之一()@Christopher,
在等待什么呢?这正是异步任务的排序操作。@Christopher是使用ContinueWith available链接任务结果的结果?为什么不使用ContinueWith()正确链接它们?这毕竟是你有任务要做的事情之一()@Christopher,
在等待什么呢?这正是异步任务的顺序操作。@Christopher是使用ContinueWith available的链接任务结果的结果?为什么?我甚至不知道|。谢谢@InBetween@AlanClark:人们通常认为
|
只对整数有效,只对位逻辑有效,但事实上它对布尔值也很有效。我注意到您也可以将程序编写为
boolsuccess=false;成功|=等待M1();成功|=等待M2()为什么?我甚至不知道|。谢谢@InBetween@AlanClark:人们通常认为
|
只对整数有效,只对位逻辑有效,但事实上它对布尔值也很有效。我注意到您也可以将程序编写为
boolsuccess=false;成功|=等待M1();成功|=等待M2()
var success =  (await TaskMethod1() | 
                await TaskMethod2() |
                /*etc.*/ );