【问题标题】:Naming convention for async functions with async delegates具有异步委托的异步函数的命名约定
【发布时间】:2017-12-21 14:15:05
【问题描述】:

我正在开发一个 API,我正在寻找一个好的、易于理解的命名约定。

考虑相同功能的这些不同类型的重载:

public async Task<TResult> DoAsync<T,TResult>(Func<T,TResult> func)
{
   var t = await ProcessAsync();
   return func(t);
}

public async Task<TResult> DoAsyncAlsoAwaitDelegateAsync<T,TResult>(Func<T,Task<TResult>> funcAsync);
{
   var t = await ProcessAsync();
   return await funcAsync(t);
}

请注意,我不能重载 DoAsync&lt;T,TResult&gt;(Func&lt;T,Task&lt;TResult&gt;&gt; func),因为这会导致调用不明确。

用户可以通过在调用时指定参数名称来解决模糊调用,但如果可能的话我宁愿不要造成不必要的混乱。

DoAlsoAwaitDelegateAsync 是一个非常笨拙的名字,所以我在这里寻找替代的命名约定。

【问题讨论】:

  • 我认为你最好在代码审查 SE 网站上问这个问题
  • @Adelin 我认为 OP 正在寻找一种命名约定,这应该在其他地方找到。这太短了,无法审查。
  • @Adelin 好点。我试图标记这个问题,以便可以移动它,但 codereview 站点不在替代站点选项中。
  • 当前范围内的问题将是 off-topic 用于代码审查@DavidS。

标签: c# asynchronous async-await naming-conventions naming


【解决方案1】:

如果你必须接受一个委托(而不是仅仅将计算值返回给调用者并让他们做自己的功能/任务组合)我只需要接受一个委托的版本Func&lt;T,Task&lt;TResult&gt;&gt;

让调用者决定他们是否有自己的异步函数,或者只是给你一个完全同步执行然后返回Task.FromResult()的函数。而不是(目前)编写两个版本的函数,只是在 it 是否知道委托可能利用一些异步方面有所不同。

【讨论】:

  • 总是将其包装在已完成的任务中不是对性能的影响吗?我当然不关心单个调用,但如果它被迭代多次。
  • 除非或直到有经过验证的性能问题 - 即我们有性能目标,并且已经测量出当前代码不符合那些我喜欢简单的目标。我不会期望这里有可衡量的开销。
猜你喜欢
  • 2017-06-23
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多