异步委托的异步函数的命名约定

时间:2017-12-21 14:15:05

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

我正在开发一个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<T,TResult>(Func<T,Task<TResult>> func),因为这会导致调用模糊。

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

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

1 个答案:

答案 0 :(得分:2)

如果你必须接受一个委托(而不是只是将计算值返回给调用者并让他们自己执行函数/任务组合)我只会接受一个版本Func<T,Task<TResult>>

将它留给调用者,无论他们是否有自己的异步函数,或者只是给你一个完全同步执行的函数,然后返回Task.FromResult()。而不是(当前)编写函数的两个版本,只是 it 知道委托可能利用某些异步。