如何使用C#同时调用多次Web服务x?
我有一个客户表(大约100万),我需要拨打5000个客户的Web服务来返回一些信息并写入文件。
我尝试过使用async / await和TPL Dataflow库,但代码比使用普通的旧同步方法要慢得多。以下是我想要实现的目标的摘要。代码将从无法标记为异步的控制台应用程序(主方法)运行。
public void GenerateCustomerFile(){
var outputFileName = "MyCustomerFile.txt";
var customers = CustomerRepo.GetCustomers();
var customerBatch = new List<Customer>();
foreach(var customer in customers){
customerBatch.Add(customer);
if(customerBatch.Count >= 20000){
// Call web service concurrently (4 threads with 5000 customers each)
// Write results to file
customerBatch.Clear();
}
}
}
答案 0 :(得分:0)
为什么要使用循环?您可以将其拆分并发送5K批次
var customerBatch = CustomerRepo.GetCustomers();
const int batchSize = 5000;
var sendingTasks = Enumerable.Range(0,(customerBatch.Length/batchSize)).Select(async a=>{
var section = customerBatch.Skip(a*batchSize).Take((a+1)*batchSize);
await "https://lolcow.com/api/entity".PostJsonAsync(section);
});
await Task.WhenAll(sendingTasks);
我正在使用Flurl来获取http请求,并不确定你使用的是什么..但是这应该做你正在做的事情...如果它比只做所有这些要慢,那么你可能会需要使批量更大
关于主要方法和异步的问题,我通常做的只是做一个主要的异步并在我的main方法中用wait调用
public static async Task MainAsync(string[] args)
{
//do stuff here
}
public static void Main(string[] args)
{
MainAsync(args).Wait();
}