【发布时间】:2021-12-14 13:36:51
【问题描述】:
我是 C# 新手,我需要帮助!我需要通过客户端休息发送分页数据。由于数据量很大,我想同时触发几个请求,但是只有一小部分数据到达目的地。你能帮我解决什么问题吗?
public void SendResultsByFireForget(string env, string transactionId, int days)
{
var client = new RestClient();
var proxyDefinition = new WebProxy("xxx.xxx.xxx.xxx");
proxyDefinition.UseDefaultCredentials = true;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
client.Proxy = proxyDefinition;
if (String.IsNullOrEmpty(transactionId))
{
throw new ArgumentException("Parameter transactionId is null or empty!");
}
if (String.IsNullOrEmpty(env))
{
throw new ArgumentException("Parameter uri is null or empty!");
}
List<Result> listOfResults = Repository.GetResultsByIntervalPerDay(-31);
if (listOfResults.Count() == 0 || listOfResults == null)
{
throw new Exception("The list of results is empty or null");
}
var tasks = new List<Task>();
foreach (List<Result> page in GetPages(listOfResults, 500))
{
var currentPageCopy = page;
var task = Task.Run(() =>
{
var currentPage = JSonExtensions.ToJSon(currentPageCopy);
var request = new RestRequest(
$"{env.Trim()}/results1/?transaction_id={transactionId.Trim()}",
Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddJsonBody(currentPage);
client.ExecuteAsync(request);
});
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
}
【问题讨论】:
-
您可以尝试在
client.ExecuteAsync(request);之前添加await,并在此处添加async:Task.Run(async () =>。
标签: c# concurrency threadpool restsharp