我可以直接使用HttpResponseMessage返回任务,这样就不需要异步声明

时间:2013-09-15 20:48:42

标签: asynchronous asp.net-web-api

我有以下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));

    }

1 个答案:

答案 0 :(得分:1)

是的,如果可以实现不带asyncawait的异步方法,那么请继续; async / await会增加开销。

当方法的最后一行只有await并且看起来像return await ...;

时,常见这种情况

在您的特定示例中,我不能100%确定这是否可行,因为该方法在await之后执行了某些操作。

直接从Task<bool>返回ContainerExistsAsync很容易,但错误处理也需要更改。如果抛出HttpResponseException效果不错,那么是的,您将能够在不使用async的情况下实现异步方法。

相关问题