hi all,
this is driving me nuts.
My client code:
I call the server once for each node in the array endpoints.
but the result (see below) is three calls with the last element
(/times)
i have tried a zillion times in vain, they all ends with three
(/times) call.
the only way i can get this right is by break out the calling
logic to a function like
void spawnRequest(string ep){...} and thus creating a copy per
call I suppose.
Two things:
It works but, it is a clumsy solution.
And I'm not really sure why it goes wrong.
i would appreciate if someone can show me a clean solution
without a 'technical' function. and why my solution goes wrong
import vibe.vibe;
import std.stdio : writefln;
import std.stdio : writeln;
void main(){
string[] endpoints = ["/", "/hello/VibeClient", "/time"];
foreach (endpoint; endpoints) {
writeln("start ",endpoint);
auto ep = endpoint;
runTask(() nothrow @safe {
try {
auto response =
requestHTTP("http://127.0.0.1:8080" ~ ep);
auto body = response.bodyReader.readAllUTF8();
() @trusted {
writefln("[%s] Response: %s", ep, body);
}();
}
catch (Exception e) {
try
{
() @trusted {
writefln("[%s] Error: %s", ep, e.msg);
}();
}
catch (Exception) {}
}
});
}
runApplication();
}
result:
PS C:\Users\Lasse\DUB\nwclient01> ./nwclient01.exe
start /
start /hello/VibeClient
start /time
[/time] Response: Current time: 2026-02-02T17:28:07.6319941
[/time] Response: Current time: 2026-02-02T17:28:07.632999
[/time] Response: Current time: 2026-02-02T17:28:07.632999