How to work around the infamous dual-context when using delegates together with std.parallelism

Christian Köstlin christian.koestlin at gmail.com
Thu May 27 12:17:36 UTC 2021


Thanks for the proposed solution. It also works in my slightly bigger 
program (although I do not like to make servers more global).

I tried also the following (which unfortunately also does not work as 
intended):

```D
import std;
string doSomething(string[] servers, string user) {
     return user ~ servers[0];
}

int main()
{
     auto users = ["u1", "u2", "u3"];
     auto servers = ["s1", "s2", "s3"];
     auto usersWithServers = users.map!(user => tuple!("user", 
"servers")(user, servers)).array;
     writeln(map!(userWithServers => 
userWithServers.servers.doSomething(userWithServers.user))(usersWithServers));
     writeln(taskPool.amap!(userWithServers => 
userWithServers.servers.doSomething(userWithServers.user))(usersWithServers));
     return 0;
}
```

Here I try to put the data I need together into one tuple ("manually") 
and then pass it all to amap. Can you explain me, where here a double 
context is needed? Because all data now should be passed as arguments to 
amap?

Kind regards,
Christian


More information about the Digitalmars-d-learn mailing list