一个方法中支持Task或Task <TResult>的接口

Interface that supports Task or Task <TResult> in one method

我正在写一个使用工厂模式的API。

我有一个接口:

public interface IAbstractProduct<TRes, TCom>
{
    Task<TRes> ExecuteAsync(TCom command);
}

任务 returns TRes,但有时我只想 return Task 而没有 TResults。 是否可以插入 TRes 使得 Task<TRes> = Task?

或者使用其他方式使接口 IAbstractProduct 处理 TaskTask<TRes>?

不,最终。你可以做的是:

  • 对于引用类型(如果你可以添加 where TRes : class),也许 return 一个 Task<TRes> 结果是 null
  • 对于值类型(如果可以添加where TRes : struct),return一个Task<TRes?>

但是:如果 TRes 可以是 any 类型,则否:这是不可能的。在那种情况下,您可以考虑类似 Task<(bool HasResult, TRes Result)> 的东西 - 实际上是手动构造的可选类型。