-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 似乎使我的 Web 请求超时。

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

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

并使用 await over .Result 进行消费 - Web 请求毫无问题地通过。我很好奇为什么?

4

1 回答 1

0

如果您在 Task 中使用 Result ,它将阻塞当前正在执行的线程,直到它返回结果为止,如果您等待调用,则请求异步运行而不会阻塞线程,并且您可以使用 await 运行多个请求(任务)函数而不会阻塞线程。所以最好使用等待而不是结果。

于 2019-05-13T20:00:06.453 回答