从 IFlurlClientFactory 更新到 IFlurlClientCache - 我需要在 IFlurlClientFactory.GetOrAdd() 周围使用吗?

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

我最近从旧的 IFlurlClientFactory 更新到新的 IFlurlClientCache,从而应用了所有必需的更改。

我们在使用以下代码时遇到问题:

public class FlurlHttpClient
{
    private IFlurlClientCache ClientCache { get; set; }

    public FlurlHttpClient(IFlurlClientCache clientCache)
        => ClientCache = clientCache;
    
    public string DoCall()
    {
        ...
        
        using (var client = ClientCache.GetOrAdd("ExampleHostName", "http://example.host.com/api"))
        {
            ...
            
            var httpResponse = await client.SendAsync
            (
                new FlurlRequest
                {
                    Content = content,
                    Url = url,
                    Verb = request.HttpMethod,
                }
            );
            
            ...
        }
        
        ...
    }
}

该代码适用于 1-1 调用情况 - 即当单个调用进入我们的 API 然后使用此类时,但是当多个调用进入我们的 API 并因此同时使用此方法时,httpResponse 将不会成功..

我们发现解决此问题的唯一方法是删除 using 部分,但我不确定这是否是正确的路径,因为看起来我们可能会在客户端再次使用之前将其处置 -尤其是快速连续..

又名——我需要找到另一种方法来处理未使用的客户端还是现在在后台处理?

flurl
1个回答
0
投票

不,绝对不要将

ClientCache.GetOrAdd
包含在
using
语句中。这有效地在
using
块的末尾处理客户端,使其无法用于将来的调用,这违背了缓存它的目的。

很像 HttpClient 不需要被处置(通常不应该)

FlurlClient
也不需要。

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