public async void Run() { var results = new List<Task<ClientResult>>(); for (var i = 0; i < numberOfClients; i++) { var destination = GrainClient.GrainFactory.GetGrain<IDestination>(Guid.NewGuid().ToString()); var client = GrainClient.GrainFactory.GetGrain<IClient>(Guid.NewGuid().ToString()); await client.Initialize(destination, numberOfRepeatsPerClient); var observer = new ClientObserver(); await client.Subscribe(GrainClient.GrainFactory.CreateObjectReference< IClientObserver>(observer).Result); clients.Add(client); observers.Add(observer); // to prevent GC collection of observer results.Add(observer.AsTask()); } clients.ForEach(c => c.Run()); var stopwatch = Stopwatch.StartNew(); await Task.WhenAll(results.ToArray()); stopwatch.Stop(); WriteResultsToConsole(stopwatch); WriteResultsToFile(stopwatch); Console.WriteLine(); Console.WriteLine("Done!. Press any key to exit ..."); }
public async void Run() { var results = new List <Task <ClientResult> >(); for (var i = 0; i < numberOfClients; i++) { var destination = DestinationFactory.GetGrain(Guid.NewGuid()); var client = ClientFactory.GetGrain(Guid.NewGuid()); await client.Initialize(destination, numberOfRepeatsPerClient); var observer = new ClientObserver(); await client.Subscribe(ClientObserverFactory.CreateObjectReference(observer).Result); clients.Add(client); observers.Add(observer); // to prevent GC collection of observer results.Add(observer.AsTask()); } clients.ForEach(c => c.Run()); var stopwatch = Stopwatch.StartNew(); await Task.WhenAll(results.ToArray()); stopwatch.Stop(); WriteResultsToConsole(stopwatch); WriteResultsToFile(stopwatch); Console.WriteLine(); Console.WriteLine("Done!. Press any key to exit ..."); }