具有异步签名与无签名的任务
Task with Async signature vs no-signature
我很少把任务搞砸。所以请向我解释一下,这是有签名任务与无签名任务之间的主要区别。
示例
async Task myTaskAsync();
vs
async Task myTask();
如果我在函数结束时不包含 Async 有什么不同吗?
是的,当你关心你的代码设计时,这很重要,例如:
public interface IMyService
{
Task<int> GetWeightAsync();
int GetWeight();
}
在这种情况下,您同时支持:异步和非异步版本供此界面的用户使用,因此他们可以决定要选择哪条路径。
C# 被设计为多态的,但在异步的情况下,它只是伪造它的一种方式。如果签名除了 return 值相同,编译器仍然会报错,所以人们决定在末尾添加后缀 'Async'。
关于函数的行为是否添加 "Async" 后缀。
它确实关系到客户对您API的看法。
此命名约定被广泛采用,因此您使用它对自己和他人都有好处。
顺便说一句:
如果有问题的 API 已经包含名为 "xxxAsync" 的遗留异步函数(非 TAP),那么建议改用 "xxxTaskAsync"。
我很少把任务搞砸。所以请向我解释一下,这是有签名任务与无签名任务之间的主要区别。 示例
async Task myTaskAsync();
vs
async Task myTask();
如果我在函数结束时不包含 Async 有什么不同吗?
是的,当你关心你的代码设计时,这很重要,例如:
public interface IMyService
{
Task<int> GetWeightAsync();
int GetWeight();
}
在这种情况下,您同时支持:异步和非异步版本供此界面的用户使用,因此他们可以决定要选择哪条路径。
C# 被设计为多态的,但在异步的情况下,它只是伪造它的一种方式。如果签名除了 return 值相同,编译器仍然会报错,所以人们决定在末尾添加后缀 'Async'。
关于函数的行为是否添加 "Async" 后缀。
它确实关系到客户对您API的看法。
此命名约定被广泛采用,因此您使用它对自己和他人都有好处。
顺便说一句: 如果有问题的 API 已经包含名为 "xxxAsync" 的遗留异步函数(非 TAP),那么建议改用 "xxxTaskAsync"。