如果方法是同步的,则保留 Task 和 Task.FromResult 还是完全删除 Task-stuff?

Keep Task and Task.FromResult if method is synchronous or remove Task-stuff at all?

我有一个 Web API 控制器(ASP.NET Core 5)。我的一些 API 是异步的,有些则不是。我的下一个问题是:如果我的方法是同步的,在 Web API 控制器中使用 public **Task<T>** WebApiMethod + Task.FromResult() 是否有任何优势?

例如:

public Task<string> GetSomeData()
{
    // some synchronous processing...
    return Task.FromResult(result);
}

我应该把上面的示例代码改成这样吗?

public string GetSomeData()
{
    // some synchronous processing...
    return result;
}

执行方式应该没有太大区别。如果您可以使处理部分异步,那将会有所不同。

如果 api 正在进行同步工作,它应该有一个同步签名。使其他开发者对该函数的可读性和理解性更加清晰,避免以后再次阅读该函数时产生误解。

以后如果方法需要修改成异步任务,可以把签名改成异步签名。

如果工作是同步的,您应该使用同步方法。

然而,如果您使用某种形式的缓存(例如使用代理模式),您应该使用 Task 签名。然后,当然,如果您已经完成了昂贵的 I/O 工作,请使用 Task.FromResult 到 return 缓存结果,如果必须,则 return I/O 任务是新下载的。