Articles of async await

¿Por qué las funciones asíncronas se llaman dos veces?

Estoy usando el temporizador de subprocesos para hacer un trabajo periódico: private static async void TimerCallback(object state) { if (Interlocked.CompareExchange(ref currentlyRunningTasksCount, 1, 0) != 0) { return; } var tasksRead = Enumerable.Range(3, 35).Select(i => ReadSensorsAsync(i)); await Task.WhenAll(tasksRead); var tasksRecord = tasksRead.Where(x => x.Result != null).Select(x => RecordReadingAsync(x.Result)); await Task.WhenAll(tasksRecord); Interlocked.Decrement(ref currentlyRunningTasksCount); } Hice el temporizador […]

Es la nueva característica de C # async implementada estrictamente en el comstackdor

Como progtwigdor de C # cuyo interés en explorar “cómo funcionan las cosas”, estoy interesado en comprender un poco más sobre el proceso que hace que funcione la nueva característica asíncrona . He seguido la excelente serie de artículos de Eric Lippert en async: Async blog posts No recuerdo haber visto en ninguna parte ninguna […]

Tarea de multiprocesamiento para procesar archivos en c #

He estado leyendo mucho sobre hilos, pero no puedo encontrar la forma de encontrar una solución a mi problema. Primero déjame presentarte el problema. Tengo archivos que necesitan ser procesados. El nombre de host y filepath se encuentran en dos matrices. Ahora quiero configurar varios hilos para procesar los archivos. El número de hilos para […]

¿Devolver una tarea viola el principio CQS?

El principio CQS ( https://en.wikipedia.org/wiki/Command%E2%80%93query_separation ) establece que un comando debe devolver vacío. La recomendación para los métodos asíncronos es nunca devolver el vacío ( https://msdn.microsoft.com/en-us/magazine/jj991977.aspx ), sino devolver una Tarea. Entonces, si escribo un comando asíncrono, ¿eso romperá inevitablemente el principio CQS?

Progreso no tiene función de informe

Tengo la aplicación de formulario de Windows este es mi código: private async void btnGo_Click(object sender, EventArgs e) { Progress labelVal = new Progress(a => labelValue.Text = a); Progress progressPercentage = new Progress(b => progressBar1.Value = b); // MakeActionAsync(labelVal, progressPercentage); await Task.Factory.StartNew(()=>MakeActionAsync(labelVal,progressPercentage)); MessageBox.Show(“Action completed”); } private void MakeActionAsync(Progress labelVal, Progress progressPercentage) { int numberOfIterations=1000; for(int […]

DebuggerStepThrough, DebuggerHidden no funciona en un método async-await

Cuando activa la función “Interrumpir cuando se produce una excepción” en el depurador de Visual Studio, se interrumpe en todas partes para los tipos de excepción seleccionados. La forma de decirle que no interrumpa un método específico es decorar estos métodos con el atributo DebuggerStepThrough (o DebuggerHidden ) . Esto, evidentemente , no funciona para […]

Pasando una tarea como parámetro

No estoy seguro de si esto es posible, así que aquí está: Tengo una secuencia de acción para realizar múltiples async Task MethodA(…) { // some code // a call to specific Async IO bound method // some code } también hay MethodB() , MethodC() , etc., y todos tienen exactamente el mismo código, excepto […]

TaskCancellationException ¿cómo evitar la excepción en el flujo de control de éxito?

En nuestra aplicación trabajamos mucho con async / await y Tasks. Por lo tanto, usa Task.Run mucho, a veces con soporte de cancelación utilizando el CancellationToken incorporado. public Task DoSomethingAsync(CancellationToken cancellationToken) { return Task.Run(() => { while (true) { if (cancellationToken.IsCancellationRequested) break; //do some work } }, cancellationToken); } Si ahora cancelo la ejecución con […]

Diferentes comportamientos asincrónicos / a la espera en casi los mismos métodos.

Digamos que tengo dos métodos asíncronos. public async static Task RunAsync1() { await Task.Delay(2000); await Task.Delay(2000); } y public async static Task RunAsync2() { var t1 = Task.Delay(2000); var t2 = Task.Delay(2000); await t1; await t2; } Entonces lo uso como public static void M() { RunAsync1().GetAwaiter().GetResult(); RunAsync2().GetAwaiter().GetResult(); } En un resultado, el RunAsync1 ejecutará […]

punto muerto incluso después de usar ConfigureAwait (falso) en el flujo de Asp.Net

Estoy golpeando el punto muerto incluso después de usar ConfigureAwait(false) , a continuación se muestra el código de muestra. Según el ejemplo http://blog.stephencleary.com/2012/02/async-and-await.html (#Avoding Context), esto no debería haber salido del locking. Esta es mi clase : public class ProjectsRetriever { public string GetProjects() { … var projects = this.GetProjects(uri).Result; … … } private async […]