C# TaskContinuationOptions组合

C# TaskContinuationOptions组合,c#,asynchronous,task-parallel-library,akka.net,C#,Asynchronous,Task Parallel Library,Akka.net,当我研究异步模式时,我发现了作者使用TaskContinuationOptions和运算符&的示例。它是一种erorr,还是一种与Akka.NET和PipeTo一起使用“&”的支持方式 为了更好地解释: AttachedToParent&ExecuteSynchronously提供0,内部lambda将作为异步任务调用 ///如果未指定延续选项,则指定默认行为 应在执行延续时使用。当antecedent任务完成时,无论antecedent的最终属性值如何,延续都会异步运行。如果延续是一个子任务

当我研究异步模式时,我发现了作者使用TaskContinuationOptions和运算符&的示例。它是一种erorr,还是一种与Akka.NET和PipeTo一起使用“&”的支持方式

为了更好地解释: AttachedToParent&ExecuteSynchronously提供0,内部lambda将作为异步任务调用

///如果未指定延续选项,则指定默认行为 应在执行延续时使用。当antecedent任务完成时,无论antecedent的最终属性值如何,延续都会异步运行。如果延续是一个子任务,它将作为分离的嵌套任务创建


问题应该存在于“&”或“|”操作符?

TL;医生:

对。作者应该使用
|
而不是
&

长答案:

按位AND=>仅当两个比较位均为1时,结果位为1。
按位或=>如果两个比较位中的任何一个为1,则结果位为1

因此,您首先要将数字转换为二进制(我将添加一些0以使比较更容易):

  • 00000000000000000000(
  • 000001:00000000000000000001(
    preferfairity
  • 000002:00000000000010(
    LongRunning
  • 000004:000000000000000000100(
    AttachedToParent
  • 065536:000100000000000000(
    notanranotomplement
  • 131072:00100000000000000000(
    无故障
  • 196608:001100000000000000(
    仅限已取消的
  • 262144:01000000000000000000(
    未取消
  • 327680:010100000000000000(
    OnlyOnFaulted
  • 393216:01100000000000(
    OnlyOnFaulted
  • 524288:100000000000000000(
    同步执行
现在您知道,例如,
onlyoncancelled
notonfault
+
NotOnRanToCompletion

或者,使用位运算符:
notonfault | NotOnRanToCompletion

另一方面,
notonfault&NotOnRanToCompletion
等于
0
,对应于
None

onlycancelled¬onfault==NotOnRanToCompletion

因此,答案是:当您想要组合时,请使用
|
。如果要获得差异,请使用
&


我希望这个例子能让它更清楚。

TL;医生:

对。作者应该使用
|
而不是
&

长答案:

按位AND=>仅当两个比较位均为1时,结果位为1。
按位或=>如果两个比较位中的任何一个为1,则结果位为1

因此,您首先要将数字转换为二进制(我将添加一些0以使比较更容易):

  • 00000000000000000000(
  • 000001:00000000000000000001(
    preferfairity
  • 000002:00000000000010(
    LongRunning
  • 000004:000000000000000000100(
    AttachedToParent
  • 065536:000100000000000000(
    notanranotomplement
  • 131072:00100000000000000000(
    无故障
  • 196608:001100000000000000(
    仅限已取消的
  • 262144:01000000000000000000(
    未取消
  • 327680:010100000000000000(
    OnlyOnFaulted
  • 393216:01100000000000(
    OnlyOnFaulted
  • 524288:100000000000000000(
    同步执行
现在您知道,例如,
onlyoncancelled
notonfault
+
NotOnRanToCompletion

或者,使用位运算符:
notonfault | NotOnRanToCompletion

另一方面,
notonfault&NotOnRanToCompletion
等于
0
,对应于
None

onlycancelled¬onfault==NotOnRanToCompletion

因此,答案是:当您想要组合时,请使用
|
。如果要获得差异,请使用
&


我希望这个例子能让它更清楚。

这些是可以应用于类似枚举的位运算符。您要查找的关键字类似于“枚举位标志”或“位掩码”。这里有一些文档:不要将
&
(按位and)与
&&
(逻辑and)等混淆。回答问题(&或|):通常是有多个标志,&是检查一个特定的标志。由于
AttachedToParent
同步执行
没有共同的位,看起来它的意图是使用
而不是
&
作为旁白:您可以用来浏览.NET Framework源代码,要浏览.NET核心源代码。对,使用&没有什么意义,因为它总是生成0(也称为None)。使用问题部分让作者意识到这一点。我编写了作者链接到的示例代码-这是一个5年前的代码示例中的错误,而不是任何Akka.NET库中的错误。但我会去解决它。这些是可以应用于类似枚举的位运算符。您要查找的关键字类似于“枚举位标志”或“位掩码”。这里有一些文档:不要将
&
(按位and)与
&&
(逻辑and)等混淆。回答问题(&或|):通常是有多个标志,&是检查一个特定的标志。由于
AttachedToParent
同步执行
没有共同的位,看起来它的意图是使用
而不是
&
作为旁白:您可以用来浏览.NET Framework源代码,浏览.NET核心源代码。对,
None = 0,
AttachedToParent = 4,
ExecuteSynchronously = 524288, // 0x00080000