Articles of async await

¿Cómo puedo evitar continuidades sincrónicas en una tarea?

Tengo un código de biblioteca (red de socket) que proporciona una API basada en Task para respuestas pendientes a las solicitudes, en función de TaskCompletionSource . Sin embargo, hay una molestia en el TPL ya que parece imposible evitar las continuas sincrónicas. Lo que me gustaría poder hacer es: decirle a TaskCompletionSource que no debe […]

Descargar varios archivos de manera asincrónica y esperar a que todos ellos terminen antes de ejecutar el rest del código

Estoy tratando de descargar varios archivos de internet y espero a que todos ellos terminen. Esta es una aplicación de consola C # que estoy ejecutando, por lo que no es necesario ningún controlador de eventos de la barra de progreso. Sin embargo, actualmente continúa ejecutando el código aunque no se hayan descargado todos los […]

ConfigureAwait empuja la continuación a un hilo de grupo

Aquí hay un código de WinForms: async void Form1_Load(object sender, EventArgs e) { // on the UI thread Debug.WriteLine(new { where = “before”, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread }); var tcs = new TaskCompletionSource(); this.BeginInvoke(new MethodInvoker(() => tcs.SetResult(true))); await tcs.Task.ContinueWith(t => { // still on the UI thread Debug.WriteLine(new { where = “ContinueWith”, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread }); }, TaskContinuationOptions.ExecuteSynchronously).ConfigureAwait(false); […]

Esperar en el bloque catch

Tengo el siguiente código: WebClient wc = new WebClient(); string result; try { result = await wc.DownloadStringTaskAsync( new Uri( “http://badurl” ) ); } catch { result = await wc.DownloadStringTaskAsync( new Uri( “http://fallbackurl” ) ); } Básicamente quiero descargar desde una URL y cuando falla con una excepción deseo descargar desde otra URL. Tanto el tiempo […]

El operador Await solo se puede usar dentro de un método Async

Estoy tratando de hacer un progtwig simple para probar la nueva funcionalidad .NET async dentro de Visual Studio 2012. Generalmente uso BackgroundWorkers para ejecutar código que consume tiempo de forma asincrónica, pero a veces parece una molestia para una operación relativamente simple (pero costosa) . El nuevo modificador asíncrono parece que sería genial de usar, […]

Secuenciación de tareas y reentrada

Tengo el siguiente escenario, que creo que podría ser bastante común: Hay una tarea (un controlador de comandos de UI) que puede completarse de forma sincrónica o asíncrona. Los comandos pueden llegar más rápido de lo que se procesan. Si ya hay una tarea pendiente para un comando, la nueva tarea del controlador de comandos […]

¿TaskResult es lo mismo que .GetAwaiter.GetResult ()?

Recientemente estuve leyendo un código que usa muchos métodos asíncronos, pero a veces es necesario ejecutarlos de forma síncrona. El código hace: Foo foo = GetFooAsync(…).GetAwaiter().GetResult(); ¿Es esto lo mismo que Foo foo = GetFooAsync(…).Result; ?

Un patrón reutilizable para convertir el evento en tarea

Me gustaría tener una pieza genérica de código reutilizable para envolver el patrón EAP como tarea , algo similar a lo que hace BeginXXX/EndXXX para BeginXXX/EndXXX modelo APM . P.ej: private async void Form1_Load(object sender, EventArgs e) { await TaskExt.FromEvent( handler => this.webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(handler), () => this.webBrowser.Navigate(“about:blank”), handler => this.webBrowser.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(handler), […]

Ejecutando tareas en paralelo

Ok, básicamente tengo un montón de tareas (10) y quiero comenzarlas todas al mismo tiempo y esperar a que se completen. Cuando esté terminado, quiero ejecutar otras tareas. Leí un montón de recursos sobre esto, pero no puedo hacerlo bien para mi caso particular … Esto es lo que tengo actualmente (el código se ha […]

¿Task.Run se considera una mala práctica en una aplicación web ASP .NET MVC?

Fondo Actualmente estamos desarrollando una aplicación web, que se basa en ASP .NET MVC 5, Angular.JS 1.4, Web API 2 y Entity Framework 6. Por razones de escalabilidad, la aplicación web heavility se basa en el patrón async / await. Nuestro dominio requiere algunos cálculos intensivos de CPU, lo que puede llevar algunos segundos ( […]