Les nouveautés .NET 6 pilotées par la communauté des développeurs

Par:
fredericmazue

lun, 30/08/2021 - 15:16

A l'approche de la sortie de .NET 6, Microsoft a publié un très intéressant billet qui récapitule les nouveautés incluses dans .NET 6 qui ont été pilotés par la communauté des développeurs. Des nouveautés que les développeurs apprécieront forcément de ce fait, d'après le billet, ce qui au premier coup d'oeil ne semble pas faux. En voici quelques-unes :

Lecture/écriture de fichiers

.NET 6 comporte une nouvelle API de bas niveau pour permettre la lecture/écriture de fichiers sans utiliser un flux de fichier (FileStream). L'API prend également en charge les E/S  à tampons multiples et les lectures et écritures qui se chevauchent à un décalage de fichier donné.

using Microsoft.Win32.SafeHandles;
using SafeFileHandle handle = File.OpenHandle("ConsoleApp128.exe");
long length = RandomAccess.GetLength(handle);

Console.WriteLine(length);

Chemins et identifiants de processus

Il existe plusieurs nouvelles façons d'accéder à un chemin de processus et à un identifiant de processus sans allouer un nouvel objet de processus

int pid = Environment.ProcessId;
string path = Environment.ProcessPath;

Console.WriteLine(pid);
Console.WriteLine(path);

Amélioration de WaitAsync

Il existe désormais un moyen beaucoup plus simple d'attendre qu'une tâche se termine de manière asynchrone. 

Task operationTask = SomeLongRunningOperationAsync();

await operationTask.WaitAsync(TimeSpan.FromSeconds(10));

Ajout de Parallel.ForEachAsync

Arrive Parallel.ForEachAsync, un moyen de planifier un travail asynchrone qui vous permet de contrôler le degré de parallélisme :

var urlsToDownload = new []
{
    "https://dotnet.microsoft.com",
    "https://www.microsoft.com",
    "https://twitter.com/davidfowl"
};

var client = new HttpClient();

await Parallel.ForEachAsync(urlsToDownload, async (url, token) =>
{
    var targetPath = Path.Combine(Path.GetTempPath(), "http_cache", url);

    HttpResponseMessage response = await client.GetAsync(url);

    if (response.IsSuccessStatusCode)
    {
        using FileStream target = File.OpenWrite(targetPath);

        await response.Content.CopyToAsync(target);
    }
});

ThrowIfNull

Plus besoin de vérifier si un argument reçu par une méthode est null avant de lancer une exception. Une ligne de code suffit :

void DoSomethingUseful(object obj)
{
    ArgumentNullException.ThrowIfNull(obj);
}