我有以下WebAPI操作,并且想知道返回Task<bool>
并直接返回_store.ContainerExistsAsync(container)
是否更好;
我问,因为如果我理解async / await正确,编译器会在await创建一个statemachine来返回相同的状态。直接返回任务而不必在动作中等待它,理论上会更快吗?
public async Task<HttpResponseMessage> GetContainer(string container)
{
if (container.Length < 3 ||
container.Length > 63 ||
!Regex.IsMatch(container, @"^[a-z0-9]+(-[a-z0-9]+)*$"))
return Request.CreateResponse(HttpStatusCode.BadRequest, new { errors = new string[1] { "Container Name is not alowed." } })
return Request.CreateResponse<bool>(HttpStatusCode.OK, await _store.ContainerExistsAsync(container));
}
答案 0 :(得分:1)
是的,如果可以实现不带async
和await
的异步方法,那么请继续; async
/ await
会增加开销。
当方法的最后一行只有await
并且看起来像return await ...;
在您的特定示例中,我不能100%确定这是否可行,因为该方法在await
之后执行了某些操作。
直接从Task<bool>
返回ContainerExistsAsync
很容易,但错误处理也需要更改。如果抛出HttpResponseException
效果不错,那么是的,您将能够在不使用async
的情况下实现异步方法。