gpt4 book ai didi

c# - 在另一个任务中启动任务正在复制我的 WebRequests

转载 作者:行者123 更新时间:2023-11-30 22:57:42 26 4
gpt4 key购买 nike

我使用下面的代码在线检查一些pdf文件并相应地返回一个字符串。

问题是:当我添加第二个 Task.Factory.StartNew() 时,它开始复制所有请求,但仍然只返回一个答案(应该如此)。

我需要它尽可能快,这样我就不会浪费时间向服务器发送两个请求。

public static void Main(string[] args)
{

var listT = new List<string>()
{
"24006025062"
};

var task = listT.Select(x => Task.Factory.StartNew(() => TesteTask(x)));

Task.WaitAll(task.ToArray(), TimeSpan.FromSeconds(120));

List<string> results = new List<string>();
foreach (var result in task)
{
results.Add(result.Result);
}
}

private static string TesteTask(string codCart)
{
var teste = new Consulta();
var retorno = string.Empty;

var session = teste.GetCaptcha();


for (int i = 0; i < 10; i++)
{
session.CaptchaResolvida = QuebraCaptcha(session.CaptchaCodificada).CaptchaResolvida;
if (session.CaptchaResolvida.Length > 0)
{
var links = teste.Consulta(codCart, session).Retorno;

if (links.Any())
{
var tasks = links.Select(x => Task.Factory.StartNew(() => Executa(teste, session, x)));

Task.WaitAll(tasks.ToArray(), TimeSpan.FromSeconds(120));

var modelList = from Result in tasks select Result.Result;

retorno = teste.FinalizaProcesso(modelList.ToList());

break;
}
}


}

return retorno;
}

private static string Executa(Consulta teste, Model<Request> session, string link)
{
var retorno = string.Empty;

for (int i = 0; i < 10; i++)
{
var CaptchaResolvida = QuebraCaptcha(teste.GetCaptchaPdf(session)).CaptchaResolvida;

if (CaptchaResolvida != null && CaptchaResolvida != string.Empty)
{
var status = teste.BaixaPdf(link, CaptchaResolvida, session);

if (status != string.Empty)
{
retorno = status;
break;
}
}
}

return retorno;
}

Ps:这是我关于堆栈溢出的第一篇文章,如果我不够清楚,请告诉我!

最佳答案

您出现此行为是因为您对返回的 Select IEnumerable 进行了两次迭代。试试这个:

public static void Main(string[] args)
{

var listT = new List<string>()
{
"24006025062"
};

var task = list
.Select(x => Task.Factory.StartNew(() => TesteTask(x)))
.ToArray();

Task.WaitAll(task, TimeSpan.FromSeconds(120));

List<string> results = new List<string>();
foreach (var result in task)
{
results.Add(result.Result);
}
}

通过将 ToArray() 移动到 Select() 之后,它只创建一次结果 IEnumerable,而不是两次。

希望对您有所帮助!

关于c# - 在另一个任务中启动任务正在复制我的 WebRequests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com