for (int i = 1; i < servers.Count;i++){
var server = new SpeedTestServer(servers[i]);
server.dist = haversine(server);
if (closestKnownServer.dist - server.dist > distTreshold){
closestKnownServer = server;
this.servers.Add(server);
this.servers.RemoveAt(0);
}
else if (Math.Abs(closestKnownServer.dist - server.dist) <= distTreshold){
this.servers.Add(server);
//BUG: we need to enable it but it causes hang
pingTasks.Add(
Task.Factory.StartNew(async () => {
await server.ping();
if (closestKnownServer.latency > server.latency){
closestKnownServer = server;
this.servers.RemoveAt(0);
}
})
);
}
}
await Task.WhenAll(pingTasks);
return closestKnownServer;
看上面的代码。我们创建一个任务列表并填充它。然后我们都等着他们。但它不能正常工作!如果完成,则使用 WhenAll 生成的任务,但它包含的任务不是。如果将断点放入 lambda 和方法的最后一行,则可以看到这一点。
PS 我知道我还需要同步,但还没有在 c# 中找到它的内置库。