private async Task ListRdd() { SetLabelsStateItem(Resource.Dowloading, Resource.PleaseWait); ViewModelStateItem.IsRunning = true; //var list = new List<RrdImageSource>(); Items.Clear(); var result = await _sshService.ListRdd(); // //efficiently process Async operations //var tasks= result.Select(r => _sshService.GetRrdFile(r)).ToList(); //while (tasks.Any() ) //{ // var completedTask = await Task.WhenAny(tasks) // .ConfigureAwait(false); // tasks.Remove(completedTask); // var resultTask = await completedTask; // var img = new StreamImageSource(); // img.Stream = token => Task.FromResult<Stream>(new MemoryStream(resultTask)); // var item = new RrdImageSource(); // //item.FileName = arrayString[i++]; // item.FileName = "" + completedTask.Id; // item.ImageSource = img; // Items.Add(item); // } var files = await _sshService.GetRrdFiles(result); var arrayString = result.ToArray(); var i = 0; foreach (var byteArray in files) { var img = new StreamImageSource(); img.Stream = token => Task.FromResult <Stream>(new MemoryStream(byteArray)); var item = new RrdImageSource(); item.FileName = arrayString[i++]; item.ImageSource = img; Items.Add(item); } //var client = _sshService.GetScpClient(); //if (!client.IsConnected) client.Connect(); //client.RemotePathTransformation = RemotePathTransformation.ShellQuote; //foreach (var file in result) // using (var ms = new MemoryStream()) // { // client.Download("/var/lib/openmediavault/rrd/" + file.Trim(), ms); // var img = new StreamImageSource(); // var byteArray = ms.ToArray(); // img.Stream = token => Task.FromResult<Stream>(new MemoryStream(byteArray)); // var item = new RrdImageSource(); // item.FileName = file; // item.ImageSource = img; // Items.Add(item); // } //Items.ReplaceRange(list); ViewModelStateItem.IsRunning = false; }