Я пытаюсь загрузить изображение из URL, чтобы позже включить его в запись списка. Проблема в том, что он не ожидает завершения асинхронной задачи. Он выполняет добавление, но изображение является нулевым, поскольку асинхронный метод не завершен.
Как заставить его ждать, пока изображение загрузится, и затем добавить запись в список?
private JavaList<Spacecraft> GetSpacecrafts()
{
spacecrafts = new JavaList<Spacecraft>();
Spacecraft s;
foreach (DataRow row in tbs.Rows)
{
var t = Task.Run(() => CallMethod(row["nueve_seis"].ToString()));
t.Wait();
s = new Spacecraft(row["nombre"].ToString(),,row["uno_cutrocuatro"].ToString(), row["nombre"].ToString(), row["desc"].ToString(), row["urllocal"].ToString(), row["urlPublica"].ToString(), row["cuatro_ocho"].ToString(), row["siete_dos"].ToString(), row["nueve_seis"].ToString(), row["uno_cutrocuatro"].ToString(), row["uno_nuevedos"].ToString(), imageBitmap);
spacecrafts.Add(s);
}
async void CallMethod(string nameimage)
{
await EjecutaTareaAsync(nameimage);
}
async Task EjecutaTareaAsync(string pathimg)
{
await Task.Run(() =>
{
imageBitmap = null;
imageBitmap = GetImageBitmapFromUrl(pathimg);
});
}
return spacecrafts;
}
private Bitmap GetImageBitmapFromUrl(string url)
{
using (var webClient = new WebClient())
{
var imageBytes = webClient.DownloadData(url);
if (imageBytes != null && imageBytes.Length > 0) return BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
}
return null;
}