await 与 .Result 与 HttpContent.ReadAsStringAsync

问题描述 投票:0回答:1

我有一个自定义模型活页夹:

public class JsonPolyModelBinder : IModelBinder
{
    private readonly JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };

    public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
    {
        var content = actionContext.Request.Content;
        var json = content.ReadAsStringAsync().Result;
        var obj = JsonConvert.DeserializeObject(json, bindingContext.ModelType, settings);
        bindingContext.Model = obj;
        return true;
    }
}

负载较大时,content.ReadAsStringAsync().Result 似乎使我的网络请求超时。

模型绑定器接口强制同步 API...但是通过将此代码移动到我的控制器中:

public async Task<IHttpActionResult> DoStuff()
{
    var json = await Request.Content.ReadAsStringAsync();
     ......
}

并使用await over .Result进行消费——网络请求顺利通过。我很好奇为什么?

json asynchronous asp.net-web-api async-await httpcontent
1个回答
0
投票

如果在 Task 中使用 Result ,它会阻塞当前正在执行的线程,直到它返回结果。

如果您

await
调用,请求会异步运行而不会阻塞线程,并且您可以使用
await
运行多个请求(任务)函数,而不会阻塞线程。

所以使用await比使用result更好。

© www.soinside.com 2019 - 2024. All rights reserved.