栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

方法名称中“ Async”后缀的使用是否取决于是否使用了“ async”修饰符?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

方法名称中“ Async”后缀的使用是否取决于是否使用了“ async”修饰符?

我认为,即使从Microsoft文档来看,事实也是模棱两可的:

在Visual Studio 2012和.NET framework 4.5中,使用

async
关键字(
Async
在Visual
Basic中)赋予的任何方法均被视为异步方法,并且C#和Visual
Basic编译器执行必要的转换,以使用TAP异步实现该方法。异步方法应返回
Task
Task<TResult>
对象。

http://msdn.microsoft.com/zh-
CN/library/hh873177(v=vs.110).aspx

那还不对。带有的任何方法

async
都是异步的,然后说应该返回
Task
Task<T>
-,这不适用于调用堆栈顶部的方法,例如Button_Click或
asyncvoid

当然,您必须考虑公约的意义是什么?

您可以说

Async
后缀约定是为了向API用户传达该方法是可以等待的。为了使方法可以等待,它必须返回
Task
一个空
Task<T>
值或一个返回值的方法,这意味着只有后者可以带有后缀
Async

或者,您可能会说

Async
后缀约定是为了传达该方法可以立即返回,放弃当前线程来执行其他工作并可能导致竞争的信息。

此Microsoft Doc引用说:

按照惯例,您可以在具有Async或async修饰符的方法名称后附加“ Async”。

http://msdn.microsoft.com/zh-
cn/library/hh191443.aspx#BKMK_NamingConvention

甚至没有提到您自己的异步方法返回

Task
需要
Async
后缀,我认为我们都同意后缀。


因此,这个问题的答案可能是:两者都有。在这两种情况下,您都需要

Async
使用
async
关键字将方法追加到返回
Task
或的方法上
Task<T>


我要请Stephen Toub澄清情况。

更新资料

所以我做了。这就是我们的好男人写的:

如果公用方法是返回Task的并且本质上是异步的(与已知的方法始终同步执行到完成但由于某种原因仍返回Task的方法相反),则该公用方法应具有“异步”后缀。这就是指导方针。这里的命名的主要目的是使功能的使用者非常清楚,所调用的方法可能不会同步完成其所有工作。当然,在同步和异步方法都公开功能的情况下,它也很有帮助,因此您需要使用名称差异来区分它们。该方法如何实现其异步实现与命名无关紧要:是否使用async
/
await来获得编译器的帮助,或者是否直接使用System.Threading.Tasks中的类型和方法(e。G。TaskCompletionSource)并不重要,因为就该方法的使用者而言,它不会影响该方法的签名。

当然,指南总是有例外。在命名的情况下,最值得注意的情况是整个类型的存在理由是要提供以异步为重点的功能,在这种情况下,每个方法上都具有异步功能可能会过大,例如Task上的方法会产生其他Tasks

至于返回空值的异步方法,不希望将它们放在公共区域中,因为调用者没有很好的方法来知道异步工作何时完成。但是,如果必须公开公开一个返回空值的异步方法,则可能确实想要一个传达异步工作正在启动的名称,如果可以的话,可以在此处使用“异步”后缀。考虑到这种情况应该是多么罕见,我认为这实际上是个案决定。

我希望有帮助,史蒂夫

斯蒂芬开场白的简洁指导很清楚。它

asyncvoid
之所以排除在外是因为用这种设计来创建公共API是不寻常的,因为实现异步void的正确方法是返回一个纯
Task
实例并让编译器发挥作用。但是,如果您确实需要
publicasync void
,则
Async
建议添加。其他堆栈顶部
async void
方法(例如事件处理程序)通常不是公开的,并且不重要/不合格。

对我来说,它告诉我,如果我发现自己想

Async
对an进行后缀
async void
,我可能应该将其转换为an,
asyncTask
以便调用者可以等待它,然后追加
Async



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418824.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号