【问题标题】:What is the accepted pattern for naming methods that return Tasks?返回任务的命名方法的公认模式是什么?
【发布时间】:2011-02-27 01:32:48
【问题描述】:

APM 使用 BeginXXX/EndXX 对,而基于事件的异步模式 (EAP) 使用 XXXAsync 和 XXXCompleted 对,但我还没有看到任何关于如何命名返回任务的方法的标准。

我一直在使用XXXTask:

Data GetData() 
Task<Data> GetDataTask()

但想知道是否开发了更标准的方法

【问题讨论】:

标签: c# .net naming-conventions


【解决方案1】:

对于 C# 5.0(带有 .NET 4.5),任务返回方法的命名约定是 XXXAsync。

如果已经存在使用此命名的方法(例如,在 WebClient 上已经有实现 EAP 模式的 DownloadDataAsync 方法),则返回异步方法的 Task 应命名为 XXXTaskAsync。

【讨论】:

  • 这里是这个命名约定的官方文档的链接:msdn.microsoft.com/en-us/library/hh873175.aspx.
  • 附带说明:确保如果您使用该命名约定,您还遵守上述链接中描述的其他原则。例如。当您的 Async 方法只是从另一个在函数中途调用的方法返回任务时,“同步工作应保持在最低限度”可能并不明显。
  • BeginXXX 不受欢迎吗?我个人更喜欢后者而不是XXXAsync
【解决方案2】:

我建议使用 ParallelExtensionsExtras 库中的模式,因为这是由最初制作 TPL 的同一团队完成的 :)

http://blogs.msdn.com/b/pfxteam/archive/2010/05/04/10007557.aspx

他们的模式似乎和你的一样:[SyncAction]Task 用于通过任务(返回)执行 SyncAction 异步的方法 - DownloadDataTask、SendTask 等。

【讨论】:

  • 接受,不是为了同意我的观点,而是为了提供参考。谢谢!
  • 我不得不承认,就方法名称应该像一个动作一样读取的目标而言,命名实际上对我来说有点奇怪 - BeginFoo、EndFoo 非常清楚(作为名称),而 FooAsync 是即使是像样的恕我直言,异步似乎也显然是一个副词。然而,FooTask 对我来说实际上有点奇怪,因为“foo”动词的末尾添加了一个名词。恕我直言,这令人困惑,例如,“SendTask”作为方法名称让我觉得它是要发送任务的东西。不过,我不确定“FooAsTask”或“FooAsyncAsTask”实际上是否更好 - 所以他们对我来说很好。 :)
【解决方案3】:

您可以考虑提供 Property 而不是 GetXXX-Method,这在 C# 中更为常见。然后你可以写

Task<Data> DataTask { get; set; } //auto-implemented

【讨论】:

  • 我认为这与 Task 版本有些正交- GetData() 作为方法而不是属性将是最初的选择,并且鉴于它的重量级足以创建异步版本,听起来像这是正确的选择 :) *Task 版本也是一种方法当然是有意义的,并且与 ParallelExtensionsExtras 库中完成的模式相匹配(尽管有人可能会争辩说,由于不支持扩展属性,所以没有选择:)其他人的属性指南:msdn.microsoft.com/en-us/library/ms229054.aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 2012-08-09
  • 2018-09-03
  • 1970-01-01
相关资源
最近更新 更多