understanding run method español create await async c# multithreading asynchronous httpwebrequest async-await

run - create async method c#



cómo usar asincrónico y esperar en el temporizador (1)

Los requisitos de mi aplicación de Windows son:

  1. Al usar HttpWebRequest se obtiene la solicitud / respuesta web cada 3 segundos en un hilo. (El total es de aproximadamente 10 hilos para hacer esta solicitud / respuesta web).

  2. Cada hilo usa algunas variables globales.

Quiero usar System.Timers.Timer y async y esperar. Pero no sé, esa es la mejor forma de lograr un alto rendimiento. Y luego cómo probarlos. Soy un verde en C #.


Puede escribir un método RepeatActionEvery() siguiente manera.

Sus parámetros son:

  • action : la acción que desea repetir cada cierto tiempo.
  • interval : el intervalo de retraso entre la action() llamada action() .
  • cancellationToken : un token que utiliza para cancelar el ciclo.

Aquí hay una aplicación de consola compilable que demuestra cómo puede llamarlo. Para una aplicación ASP lo llamarías desde un lugar apropiado.

Tenga en cuenta que necesita una forma de cancelar el ciclo, por lo que paso un CancellationToken a RepeatActionEvery() . En esta muestra, utilizo una fuente de cancelación que cancela automáticamente después de 8 segundos. Es probable que deba proporcionar una fuente de cancelación para la cual otro código llamado .Cancel() en el momento apropiado. Mira aquí para más detalles.

using System; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp1 { sealed class Program { void run() { CancellationTokenSource cancellation = new CancellationTokenSource( TimeSpan.FromSeconds(8)); Console.WriteLine("Starting action loop."); RepeatActionEvery(() => Console.WriteLine("Action"), TimeSpan.FromSeconds(1), cancellation.Token).Wait(); Console.WriteLine("Finished action loop."); } public static async Task RepeatActionEvery(Action action, TimeSpan interval, CancellationToken cancellationToken) { while (true) { action(); Task task = Task.Delay(interval, cancellationToken); try { await task; } catch (TaskCanceledException) { return; } } } static void Main(string[] args) { new Program().run(); } } }