C# TaskContinuationOptions组合
当我研究异步模式时,我发现了作者使用TaskContinuationOptions和运算符&的示例。它是一种erorr,还是一种与Akka.NET和PipeTo一起使用“&”的支持方式 为了更好地解释: AttachedToParent&ExecuteSynchronously提供0,内部lambda将作为异步任务调用 ///如果未指定延续选项,则指定默认行为 应在执行延续时使用。当antecedent任务完成时,无论antecedent的最终属性值如何,延续都会异步运行。如果延续是一个子任务,它将作为分离的嵌套任务创建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的最终属性值如何,延续都会异步运行。如果延续是一个子任务
问题应该存在于“&”或“|”操作符?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