相关疑难解决方法(0)

是否必须处理HttpClient和HttpClientHandler?

.NET Framework 4.5中的System.Net.Http.HttpClientSystem.Net.Http.HttpClientHandler实现了IDisposable(通过System.Net.Http.HttpMessageInvoker).

using声明文件说:

通常,当您使用IDisposable对象时,您应该在using语句中声明并实例化它.

这个答案使用了这种模式:

var baseAddress = new Uri("http://example.com");
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
{
    var content = new FormUrlEncodedContent(new[]
    {
        new KeyValuePair<string, string>("foo", "bar"),
        new KeyValuePair<string, string>("baz", "bazinga"),
    });
    cookieContainer.Add(baseAddress, new Cookie("CookieName", "cookie_value"));
    var result = client.PostAsync("/test", content).Result;
    result.EnsureSuccessStatusCode();
}
Run Code Online (Sandbox Code Playgroud)

但是微软最明显的例子并没有Dispose()明确地或隐含地调用.例如:

c# idisposable using .net-4.5 dotnet-httpclient

315
推荐指数
7
解决办法
12万
查看次数

是否建议使用 AmazonS3Client 作为单例?

AmazonS3Client在 Web应用程序中使用 时,是否建议为应用程序的整个生命周期创建一个实例,还是应该每次上传到 S3 时创建一个新实例

除了推荐使用单例方法的 Java 客户端之外,我找不到任何关于此的文档。

我对此很感兴趣,因为HttpClient众所周知,您不应创建多个实例

例如,在AmazonS3Client? 中是否有某种池/连接管理?有AmazonS3Config.ConnectionLimit,但我找不到很多关于它的文档。当您使用Parallel.ForEach以获得最大吞吐量时,这是如何工作的?

.net c# amazon-s3

7
推荐指数
0
解决办法
1653
查看次数

为什么在使用Polly的后续重试期间HttpClient会继续失败?

我有几种方法需要某种互联网连接.如果连接失败,我想在失败前重试该方法一段时间.由于应用程序可以在等待成功响应时愉快地继续运行,因此我希望异步执行此操作.

我正在使用Polly(5.3.1)来实现异步重试逻辑杠杆Tasks.

我正在通过禁用Wi-Fi启动该过程并在重试窗口期间启用它来模拟断开连接.我希望在再次启用我的连接之后,该方法在重试时会成功,我所看到的是该方法继续抛出一个HttpRequestException好像连接已关闭,直到重试完成,此时它将抛出给调用者.
如果我正常启用Wi-Fi启动方法,它会立即成功.

// Get the HTML of a web page 'async'
public async Task<string> GetHtmlAsync(string url)
{
    using (var client = new HttpClient())
    using (var response = await client.GetAsync(url))
    {
        response.EnsureSuccessStatusCode();
        using (var content = response.Content)
        {
            return await content.ReadAsStringAsync();
        }
    }
}

// Wrapper for Polly to create an async retry policy
public async Task<TResult> RetryAsync<TResult, TException>(Task<TResult> task, int retries, int seconds) where TException : Exception
{
    return await Policy
               .Handle<TException>() …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task-parallel-library polly

4
推荐指数
1
解决办法
327
查看次数