Les nouveautés .NET 6 pilotées par la communauté des développeurs
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);
}