On 11/18/20 7:01 AM, Vino wrote:

>    Request your help on how to call a function(listFile) from another
> function(getFilelist) within the same class(GetDirlist), below is an
> example code.

That code looks unnecessarily complex to me. First of all, parallel() already executes the loop body in separate threads, so I don't see any reason for Task in that code.

std.parallel will appear during my DConf presentation on Saturday. The following program applies ideas from some of my slides and just works in parallel:

import std.process;
import std.exception;
import std.format;
import std.parallelism;
import std.stdio;

class GetDirlist {

  @system private auto listFile(immutable string st)
  {
    auto fl = execute(["ls","-l"]);
    enforce(fl.status == 0, format("File not Found: %s", fl.status));
    return fl.output;
  }

  @system public auto getFilelist()
  {
    // I am using D dynamic arrays for simpliticy
    auto flstore = [ "/path1/Dir1", "path2/Dir2" ];

    // Note preallocated slot for each result:
    auto amidata = new string[flstore.length];

    // Taking advantage of automatic loop counter
    foreach(i, st; parallel(flstore,1)) {
      // Each execution assigns to its own slot
      amidata[i] = listFile(st);
    }
    return amidata[];
  }
}

void main() {
  // Need an object to call a non-static member function:
  auto g = new GetDirlist();
  writeln(g.getFilelist());
}

Ali

Reply via email to