Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 并行启动多个任务?_C#_.net_Asynchronous - Fatal编程技术网

C# 并行启动多个任务?

C# 并行启动多个任务?,c#,.net,asynchronous,C#,.net,Asynchronous,开发一个MVC5应用程序,调用外部Web服务获取数据并保存到MyDB。外部web服务具有异步方法,因此我希望在服务层上使用异步方法 我将解决方案升级到.NET 4.5.2,以利用添加的HostingEnvironment.QueueBackgroundWorkItem 因此,我的MVC控制器具有以下功能: HostingEnvironment.QueueBackgroundWorkItem(async cancellationToken => { await _myService

开发一个MVC5应用程序,调用外部Web服务获取数据并保存到MyDB。外部web服务具有异步方法,因此我希望在服务层上使用异步方法

我将解决方案升级到.NET 4.5.2,以利用添加的
HostingEnvironment.QueueBackgroundWorkItem

因此,我的MVC控制器具有以下功能:

HostingEnvironment.QueueBackgroundWorkItem(async cancellationToken =>
{
     await _myService.AddCars(cars);
});
}.
return RedirectToAction("Index", "Home");
外部Web服务客户公司告诉我,如果传入的汽车数量少于1000辆,我可以按原样运行pass—如果超过1000辆,最好将其分成1000个包,并行运行最多5辆

MVC控制器点击的方法如下所示:

    public async Task AddCars(List<Car> cars)
    {
        if (cars.Count > 1000)
        {
             const int packageSize = 1000;
             var packages = SplitCars(cars, packageSize);

            //await Task.WhenAll(packages.Select(RunCarExternalServiceAndWriteResponseToDb));
        }
        else
        {
            await RunCarExternalServiceAndWriteResponseToDb(cars);
        }
    }
公共异步任务添加车辆(列出车辆)
{
如果(车数>1000)
{
const int packageSize=1000;
var包装=拆分汽车(汽车,包装尺寸);
//wait Task.whalll(packages.Select(runcarexternalservices和writeresponsetodb));
}
其他的
{
等待RunCareExternalService并写入响应ODB(cars);
}
}
我已经注释掉了等待任务。当我想我可能需要这样的东西时-我需要的是,如果有3000辆车通过-这被分成3个包,1000辆,然后并行运行-如果有7000辆,例如-这将被分成7个包,1000辆,5辆并行运行-一旦那5辆车返回下一个2辆车1000个包装并行运行-然后如果12000辆汽车通过-分成12个1000个包装-第一批5*1000并行运行,第二批5*1000并行运行,最后第三批2*1000并行运行

有谁能提出一个实现这一目标的好方法吗


注意-我的RunCareExternalService和WriterResponsetODB方法在这里被标记为异步方法,它调用实际的外部Web服务方法-共3个-WCF外部服务调用-如果为null,则在每一个方法中都会创建一个新的客户端,并且在finally块中关闭客户端并将其设置为null

考虑使用TPL数据流。它在这方面非常出色,可以完全异步运行。回答如下: