我的代码与此非常相似(我对代码进行了一些简化,以展示我要弄清楚的行为的本质)。
public async System.Threading.Tasks.Task<bool> IsNumberOdd(int numToTest)
{
if (numToTest % 2 == 0)
{
return false;
}
else
{
return true;
}
}
如果我离开关async
关键字,我得到一个有关无法施展投诉bool
到Task<bool>
。我假设这里包含一些语法糖。看一下IL(我对IL不太熟悉),似乎async关键字正在导致任务运行,然后返回值是任务的结果。我理解正确吗?
顺便说一句,如果这是一个骗子,或者有一些讨论此问题的博客文章,请随时指向我并关闭它。我不是要填补我的代表;我试图了解这段代码的情况。
编辑:
对于所有问“为什么这种方法为什么异步?”的人-因为我试图构建一个小的简单代码示例来演示这个问题。我还应该添加一个调用代码示例,但是我试图使代码尽可能的小而简单。
我假设这里有一些语法糖
不完全是“语法糖”。该方法标记为,编译器正在生成状态机async
。这就是为什么您可以在Task<bool>
不显式创建Task
返回值的情况下返回a的原因。
如果我不使用async关键字,则会收到有关无法将bool强制转换为的投诉
Task<bool>
。
该async
修改是什么触发编译器创建的状态机。如果删除它,则需要Task
自己创建。如果出于任何原因要创建一个Task<T>
但实际上正在同步运行,请Task.FromResult
成为您的朋友。
我认为没有理由标记此方法async
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句