首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么要使用HttpClient进行同步连接

为什么要使用HttpClient进行同步连接
EN

Stack Overflow用户
提问于 2013-01-21 17:17:31
回答 4查看 201.9K关注 0票数 220

我正在构建一个类库来与API交互。我需要调用API并处理XML响应。我可以看到使用HttpClient进行异步连接的好处,但是我所做的是纯同步的,所以我看不到使用HttpWebRequest有什么显著的好处。

如果有人能提供任何线索,我将不胜感激。我不是一个为了使用新技术而使用它的人。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-03-16 21:18:58

对于现在遇到这个问题的任何人,.NET 5.0已经在HttpClient中添加了一个同步Send方法。https://github.com/dotnet/runtime/pull/34948

优点以及为什么在这里详细讨论- https://github.com/dotnet/runtime/issues/32125

因此,您可以使用它而不是SendAsync。例如

代码语言:javascript
复制
public string GetValue()
{
    var client = new HttpClient();
            
    var webRequest = new HttpRequestMessage(HttpMethod.Post, "http://your-api.com")
    {
        Content = new StringContent("{ 'some': 'value' }", Encoding.UTF8, "application/json")
    };

    var response = client.Send(webRequest);

    using var reader = new StreamReader(response.Content.ReadAsStream());
            
    return reader.ReadToEnd();
}

这段代码只是一个简化的例子,它还没有准备好投入生产。

票数 12
EN

Stack Overflow用户

发布于 2019-05-21 23:40:03

代码语言:javascript
复制
public static class AsyncHelper  
{
    private static readonly TaskFactory _taskFactory = new
        TaskFactory(CancellationToken.None,
                    TaskCreationOptions.None,
                    TaskContinuationOptions.None,
                    TaskScheduler.Default);

    public static TResult RunSync<TResult>(Func<Task<TResult>> func)
        => _taskFactory
            .StartNew(func)
            .Unwrap()
            .GetAwaiter()
            .GetResult();

    public static void RunSync(Func<Task> func)
        => _taskFactory
            .StartNew(func)
            .Unwrap()
            .GetAwaiter()
            .GetResult();
}

然后

代码语言:javascript
复制
AsyncHelper.RunSync(() => DoAsyncStuff());

如果使用类将异步方法作为参数传递,则可以以安全方式从同步方法调用异步方法。

这里有解释:https://cpratt.co/async-tips-tricks/

票数 10
EN

Stack Overflow用户

发布于 2013-01-21 17:24:12

如果您正在构建一个类库,那么您的库的用户可能希望异步使用您的库。我认为这就是最大的原因。

你也不知道你的库将如何被使用。也许用户将处理大量的请求,异步处理将有助于它更快、更高效地执行。

如果您可以简单地做到这一点,请尽量不要将负担放在您的库的用户身上,当您可以为他们处理它时,他们会尝试使流程异步。

我不会使用异步版本的唯一原因是,如果我试图支持一个还没有内置异步支持的旧版本的.NET。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14435520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档