小编Mar*_*ijn的帖子

使用任务处理大量 HTTP 请求

因此,我在使用任务来处理 HTTP 请求负载时遇到了一些困难。

我想做的是从 WMTS 创建一个大图像。对于那些不知道的人来说,WMTS 是一种网络地图切片服务。因此基本上,您可以通过发送包含正确的tileRow 和tileColumn 的请求来请求256x256 的图像图块。因此,在本例中,我尝试构建包含数百甚至数千个此类图像图块的图像。

为此,我创建了一个应用程序:

  • 根据输入计算需要请求哪些图块。
  • 创建一个列表,我可以使用该列表向 WMTS 发出正确的 HTTP 请求。
  • 将这些请求发送到服务器并检索图像。
  • 将图像拼接成一张大图像。这就是我们想要的结果。

正如您所想象的那样,瓷砖的数量呈指数级增长。这并不会真正影响 CPU 工作,但主要是 I/O 密集型工作。因此,我认为在发送下一个请求之前,不要等待每个请求返回,而是使用任务来完成此任务。创建将处理每个单独请求的任务,并在所有任务完成后构建大图像。

所以这是我已经知道我要请求什么图块的方法。在这里,我想递归地发送带有任务的请求,直到所有数据完成(最终使用最大重试机制)。

    public Dictionary<Tuple<int, int>, Image> GetTilesParallel(List<Tuple<int, int>> tileMatrix, int retry = 0)
    {
        //The dictionary we will return
        Dictionary<Tuple<int, int>, Image> images = new Dictionary<Tuple<int, int>, Image>();

        //The dictionary that we will recursively request if tiles fail.
        List<Tuple<int, int>> failedTiles = new List<Tuple<int, int>>();

        //To track when tasks are finished
        List<Task> tasks = new List<Task>();

        foreach …
Run Code Online (Sandbox Code Playgroud)

.net c# task-parallel-library

2
推荐指数
1
解决办法
948
查看次数

标签 统计

.net ×1

c# ×1

task-parallel-library ×1