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 ..."); }
public async static System.Threading.Tasks.Task <IClientObserver> CreateObjectReference(IClientObserver obj) { if (methodInvoker == null) { methodInvoker = new ClientObserverMethodInvoker(); } return(ClientObserverFactory.Cast(await GrainReference.CreateObjectReference(obj, methodInvoker))); }