如果方法是同步的,则保留 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 任务是新下载的。
我有一个 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 任务是新下载的。