Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

656
Vistas
¿Cómo ejecutar simultáneamente varias tareas y esperarlas en Unity 2019.4 y .NET 4.X?

Tengo un método que recibe múltiples cadenas de URL y se supone que crea solicitudes HTTP para cada una de ellas, simultáneamente, espera a que terminen y luego devuelve una lista que contiene el resultado de cada solicitud.

Traté de implementar la lógica async/await como se ilustra con el siguiente código:

 private static readonly HttpClient httpClient = new HttpClient(); public class Response { public bool isError; public string content; } public async void TestManyGetRequestsAsync(List<string> urls) { List<Response> responses = await GetManyRequestsAsync(urls); foreach (Response response in responses) { Debug.LogFormat("Content: {0}", response == null ? "NULL" : response.content); } } async Task<List<Response>> GetManyRequestsAsync(List<string> urls) { List<Task<Response>> tasks = new List<Task<Response>>(); foreach (string url in urls) { Task<Response> task = Task.Run<Response>(() => AsyncGetRequest(url)); // This line appears to do the same thing as the line below // Task<RestAPI.Response> task = RestAPI.Get(url); tasks.Add(task); } Response[] responses = await Task.WhenAll(tasks); return responses.ToList(); } public async Task<Response> AsyncGetRequest(string url) { Task<HttpResponseMessage> task = httpClient.GetAsync(url); HttpResponseMessage message; Debug.LogFormat("Sending GET request for {0}", url); try { message = await task; } catch { return null; } Response response = new Response { isError = !message.IsSuccessStatusCode, content = await message.Content.ReadAsStringAsync() }; Debug.LogFormat("Received GET response for {0}: {1}", url, response); return response; }

El problema es que cada tarea se ejecuta secuencialmente, lo que significa que cada tarea está en espera mientras la anterior está en curso.

Tengo la impresión de que pueden estar involucrados diferentes factores (la forma en que implementé la lógica async/await, la forma en que se ejecutan las solicitudes, etc.) pero no puedo encontrar una solución clara a mi problema.

Cualquier pista o sugerencia sería muy apreciada, ¡gracias!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puede ser más fácil usar el propio UnitWebRequest de Unity, es asíncrono por naturaleza, por lo que todo lo que tiene que hacer es iniciarlos todos y luego verificar cada cuadro para ver si están listos. Este código simple a continuación demuestra esto, puede mejorar el rendimiento mediante el uso de rutinas, pero probablemente no sea necesario a menos que esté manejando una gran cantidad de llamadas web al mismo tiempo.

 string[] urls = { "http://url1.com", "http://url2.com" }; List<UnityWebRequest> webRequests = null; List<UnityWebRequest> doneRequests = null; bool initialized = false; private void Update() { InitWebRequests(); if (CheckWebRequestsDone()) { HandleResults(doneRequests); } } private void InitWebRequests() { if (initialized) { return; } initialized = true; webRequests = new List<UnityWebRequest>(); foreach (string url in urls) { UnityWebRequest wr = UnityWebRequest.Get(url); wr.SendWebRequest(); webRequests.Add(wr); } } private bool CheckWebRequestsDone() { foreach(UnityWebRequest wr in webRequests.ToArray()) { if (wr.isDone) { webRequests.Remove(wr); doneRequests.Add(wr); } } return webRequests.Count == 0; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda