小编Ell*_*iot的帖子

HttpClient异步请求未完成在循环中发送的大批量

我想我已经设法做了一个可重复显示这个问题的测试,至少在我的系统上是这样.此问题涉及用于坏端点的HttpClient(非远程端点,目标已关闭).

问题是完成任务的数量不足总数,通常是几个.我不介意请求不起作用,但这只会导致应用程序在等待结果时挂在那里.

我从下面的测试代码中得到以下结果:

经历:237.2009884秒.批处理数组中的任务:8000个已完成的任务:7993

如果我将batchsize设置为8而不是8000,则完成.对于8000,它会在WhenAll上进行阻塞.

我想知道其他人是否会得到相同的结果,如果我做错了什么,如果这似乎是一个错误.

using System;
using System.Diagnostics;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;

namespace CustomArrayTesting
{

    /// <summary>
    /// Problem: a large batch of async http requests is done in a loop using HttpClient, and a few of them never complete
    /// </summary>
    class ProgramTestHttpClient
    {
        static readonly int batchSize = 8000; //large batch size brings about the problem

        static readonly Uri Target = new Uri("http://localhost:8080/BadAddress");

        static TimeSpan httpClientTimeout = TimeSpan.FromSeconds(3);  // short Timeout …
Run Code Online (Sandbox Code Playgroud)

.net c# dotnet-httpclient asynchttpclient

6
推荐指数
1
解决办法
6192
查看次数

T4模板:当它使用的某个类被修改时,是否可以使模板运行?

我创建了一个简单的设计时模板,它使用驻留在同一个项目中的枚举.该模板为该枚举类型中的每个变量创建了一个类定义.

我注意到无论如何更改和保存.tt文件会使它再次出现c#代码.我希望我可以设置解决方案,这样如果我更改枚举然后保存,那么模板也可能再次生成源.那样当我想添加一个新类型时,我可以添加一个变量枚举定义,也许只需按保存.

目前我必须这样做:

  1. 将变量添加到其.cs文件中的枚举定义中.
  2. 重新编译项目.
  3. 在模板.tt文件上"运行自定义工具".
  4. 然后需要再次编译以编译t4生成的源代码.

那么,也许有一种方法可以让模板"检测"其使用的另一个源的变化,并采取行动,就像它自己被修改一样?

c# t4

5
推荐指数
1
解决办法
2559
查看次数

标签 统计

c# ×2

.net ×1

asynchttpclient ×1

dotnet-httpclient ×1

t4 ×1