On Thursday, 6 November 2014 at 10:53:32 UTC, Misu wrote:
Hi,

when I execute this code I have 7 7 7 as result, I think I understand why.

How can I execute a special task for one element ?

import std.stdio;
import std.parallelism;

void main(string[] args)
{
        class Account
        {
                public this(int id) { this.id = id; }
                int id;
        }

Account[] accounts = [new Account(5), new Account(6), new Account(7)];

        foreach(acc; accounts)
        {
                task(() { writeln(acc.id); }).executeInNewThread();
        }
        
        readln();
}

It's a bug: https://issues.dlang.org/show_bug.cgi?id=2043

As a workaround, you can nest the call in another lambda:

    foreach(acc; accounts)
    {
        (Account acc) {
            task(() { writeln(acc.id); }).executeInNewThread();
        } (acc);
    }

Reply via email to