public static async Task<decimal> Add(string input1, string input2)
{
decimal number1 = Convert.ToDecimal(input1);
decimal number2 = Convert.ToDecimal(input2);
decimal sum = 0M;
sum = await Add(number1, number2); //PROBLEM HERE
return sum;
}
public static decimal Add(decimal number1, decimal number2)
{
return number1 + number2;
}
}
严重级代码描述项目文件行抑制状态 错误CS1061&#39;十进制&#39;不包含&#39; GetAwaiter&#39;的定义 没有扩展方法&#39; GetAwaiter&#39;接受第一个论点 键入&#39;十进制&#39;可以找到(你是否错过了使用指令或 装配参考?)
注意:对于示例
的细化感到抱歉答案 0 :(得分:3)
正如其他人所指出的那样,您无法等待Add
方法,因为它不会返回Task
。
public static Task<decimal> Add(decimal number1, decimal number2)
{
// Async code goes here
return number1 + number2;
}
我还想指出,如果你在Add
方法中所做的只是return number1 + number2;
,那么在这里使用await
充其量是毫无意义的。第一名。添加不是一项昂贵的操作,因此您实际上会通过在后台线程上执行降低性能(因为与线程和async / await相关的开销)。
另外,正如@juharr指出的那样,async / await的主要用例是IO绑定操作,但事实并非如此。有两种方法可以使用async / await:
虽然你所拥有的是技术上一个CPU绑定操作,但你现在使用它的方式毫无意义,因为它根本不会提高性能 - 甚至一点也不提高。添加非常快,因为它可以很容易地在硬件中实现(并且大多数现代处理器都可以),并且在任何情况下你都没有做任何真正的并行性(即你只是等待结果,所以它不像你在计算加法的同时,在临时做任何其他工作。
我的回答here有一些额外的细节(加上Stephen Cleary的任何内容,我认为他是该主题的最佳作家之一。)