我想我已经设法做了一个可重复显示这个问题的测试,至少在我的系统上是这样.此问题涉及用于坏端点的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) 我创建了一个简单的设计时模板,它使用驻留在同一个项目中的枚举.该模板为该枚举类型中的每个变量创建了一个类定义.
我注意到无论如何更改和保存.tt文件会使它再次出现c#代码.我希望我可以设置解决方案,这样如果我更改枚举然后保存,那么模板也可能再次生成源.那样当我想添加一个新类型时,我可以添加一个变量枚举定义,也许只需按保存.
目前我必须这样做:
那么,也许有一种方法可以让模板"检测"其使用的另一个源的变化,并采取行动,就像它自己被修改一样?