因此,我在使用任务来处理 HTTP 请求负载时遇到了一些困难。
我想做的是从 WMTS 创建一个大图像。对于那些不知道的人来说,WMTS 是一种网络地图切片服务。因此基本上,您可以通过发送包含正确的tileRow 和tileColumn 的请求来请求256x256 的图像图块。因此,在本例中,我尝试构建包含数百甚至数千个此类图像图块的图像。
为此,我创建了一个应用程序:
正如您所想象的那样,瓷砖的数量呈指数级增长。这并不会真正影响 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)