Articles of async await

aguardan miles de tareas

Tengo una aplicación que convierte algunos datos a menudo hay 1.000 – 30.000 archivos. Necesito hacer 3 pasos: Copia un archivo (reemplaza algún texto allí) Realice una solicitud web con WebClient para descargar un archivo (envío el archivo copiado a un servidor web, que convierte el archivo a otro formato) Toma el archivo descargado y […]

Continuar Con pierde el SynchronizationContext

En el siguiente fragmento, se pierde el SynchronizationContext , y por eso también el CurrentCulture y el CurrentUICulture . Log() viene de esta respuesta . public async Task Index() { Log(“before GetAsync”); await new HttpClient().GetAsync(“http://www.example.com/”) .ContinueWith(request => { Log(“ContinueWith”); request.Result.EnsureSuccessStatusCode(); }, TaskContinuationOptions.AttachedToParent); return View(); } static void Log(string message) { var ctx = System.Threading.SynchronizationContext.Current; System.Diagnostics.Debug.Print(“{0}; […]

Restricción genérica basada en la no implementación de la interfaz

Tengo una aplicación con un servicio de fábrica para permitir la construcción de instancias mientras se resuelve la dependency injection necesaria. Por ejemplo, uso esto para construir modelos de vista de diálogo. Tengo una interfaz de servicio que se parece a esto: public interface IAsyncFactory { Task Build() where T: class, IAsyncInitialize; } Idealmente, lo […]

¿Cómo async este método de larga duración?

Tengo este método que me gustaría ejecutar de forma asíncrona para que pueda hacer otras cosas mientras se ejecuta. No se basa en ningún otro método Async (no llama a otro recurso, descarga un archivo ni nada). Me gustaría evitar el uso de new Task() , Task.Factory.StartTask() y Task.Run() , si es posible. ¿Es posible […]

Falta de respuesta con los controladores de eventos asíncronos en WPF en .NET 4.5

He creado una operación asíncrona simple que se activa cuando se hace clic en el botón. Aquí está el código completo: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private async void Button_Click_1(object sender, RoutedEventArgs e) { var htmlString = await DowloadPage(“http://example.com”); txtBlock1.Text = htmlString; } public async Task DowloadPage(string uri) […]

EF6 ToListAsync congela Winforms

Tengo una aplicación simple de Winforms con un botón en ella. Utilizando primero el código EF 6.1.1, si uso .ToListAsync en una consulta, congelará el formulario hasta que el resultado vuelva del SQL Server. private async void button1_Click(object sender, EventArgs e) { using( var context = new MyEFContext() ) { var result = await context.MyTable.ToListAsync(); […]

ConfigureAwait (False) no cambia el contexto después de ContinueWith ()

No sé si estoy haciendo algo mal o encontré un error en la biblioteca de Async, pero he visto un problema al ejecutar un código asíncrono después de regresar al contexto sincronizado con continueWith (). ACTUALIZACIÓN: el código ahora se ejecuta using System; using System.ComponentModel; using System.Net.Http; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { internal […]

¿Cómo obtener este problema recursivo de async / await correcto?

Tengo un método recursivo que visita cada nodo en una jerarquía de árbol y activa una callback para cada nodo, como (el código a continuación no se prueba y un ejemplo): void Visit(Node node, Func callback, CancellationToken ct) { if(ct.IsCancellationRequested) { return; } var processedNode = DoSomeProcessing(node); int result = callback(processedNode); // Do something important […]

La excepción al usar aguarda HttpClient.GetAsync en la biblioteca de clases portátil

Tengo Portable Class Library (net40 + sl4 + win8 + wp71) con el código: public static async Task<Dictionary> GetFeeds() { try { string data; using (HttpMessageHandler handler = new HttpClientHandler()) { using (HttpClient httpClient = new HttpClient(handler)) { data = await httpClient.GetStringAsync(FeedsUrl + Guid.NewGuid()).ConfigureAwait(false); } } if (data != null) { //… } return null; […]

La tarea asíncrona está congelando la interfaz de usuario

Tengo un método como este: private async Task DoSomething() { // long running work here. } Cuando llamo al método como este, bloquea la interfaz de usuario: Task t = DoSomething(); Tengo que hacer uno de estos para que sea no bloqueante: Task t = new Task(() => DoSomething()); t.Start(); // Or Task t = […]