Otra característica importante es la introducción de flujos asincrónicos. El objetivo de la nueva característica es introducir soporte para métodos que son tanto iteradores como asíncronos. Dichos métodos se pueden usar en escenarios en los que es necesario consumir o producir flujos continuos de resultados (es decir, desde un dispositivo IoT o un servicio en la nube).
Las secuencias asíncronas se implementan a través de las interfaces IAsyncEnumerable<T> and IAsyncEnumerator<T>, que se pueden usar junto con la función async / wait (introducida originalmente en C# 5.0). Un método que devuelve una secuencia asincrónica debe declararse con el modificador asíncrono y también debe tener una de las nuevas interfaces como su tipo de retorno. También debe contener declaraciones de rendimiento de retorno para devolver elementos sucesivos en la secuencia asincrónica.
El siguiente ejemplo está contenido en la documentación oficial de Microsoft. Implementa un método que genera una secuencia de 0 a 19, esperando 100 ms entre generar cada número:
public static async System.Collections.Generic.IAsyncEnumerable<int> GenerateSequence()
{
for (int i = 0; i < 20; i++)
{
await Task.Delay(100);
yield return i;
}
}
Se pueden encontrar más detalles sobre las secuencias asíncronas en la especificación de idioma oficial.
Los miembros de interfaz predeterminados son una característica que permite al desarrollador agregar miembros a las interfaces y proporcionar una implementación para esos miembros (permitiendo así métodos en interfaces con implementaciones concretas). El objetivo es permitir una mayor flexibilidad para los autores de API, para que puedan agregar métodos a una interfaz existente sin romper la compatibilidad con versiones anteriores. Esta característica es similar a los métodos predeterminados de Java.
C# 8.0 también agrega dos nuevos patrones de código: coincidencia recursiva de patrones y un patrón relacionado con la declaración de uso. Los patrones recursivos, en pocas palabras, permiten que los patrones contengan otros patrones, como en el ejemplo a continuación (también de la documentación oficial de Microsoft):
IEnumerable<string> GetEnrollees()
{
foreach (var p in People)
{
if (p is Student { Graduated: false, Name: string name }) yield return name;
}
}
La siguiente nota te hablaremos más de este tema. Mientras te sugerimos que veas estos tres cursos externos.
Curso de PHP
Curso de C#
Renta de aulas.
|