ArgumentNullException.ThrowIfNull
Az ArgumentNullException kivétel ThrowIfNull metódusa leegyszerűsÃti az ArgumentNullException kivételek dobását:
void Method(string parameter)
{
//.NET 6 előtt:
if (parameter == null)
throw new ArgumentNullException(nameof(parameter));
//.NET 6 óta:
ArgumentNullException.ThrowIfNull(parameter);
}
Kriptográfiailag biztos véletlenszám-generálás
A modern biztonságos titkosÃtások működéséhez elengedhetetlen egy kriptográfiailag biztonságos véletlenszám-generátor1. A .NET korábbi változataiban is megtalálható volt egy ilyen komponens, de ennek a használata picit körülményes volt. Ezt egyszerűsÃti le a RandomNumberGenerator osztály GetBytes metódusa.
//16 byte véletlen adat
byte[] random = RandomNumberGenerator.GetBytes(16);
Task.WaitAsync
A WaitAsync metódust egy Task tÃpusú objektumon tudjuk meghÃvni. Lényegében arra jó, hogy egy Task befejezésére várjunk aszinkron módon. Ha a paraméternek adott idÅ‘ lejárt, akkor a Task-ot, amin meghÃvtuk, Completed állapotba billenti. Az idÅ‘t egy TimeSpan példányban tudjuk megadni. Opcionálisan kiegészÃthetjük egy CancellationToken példánnyal is.
Task dload = LongRunningDownload();
//Az eredeti task maximum 10 másodpercig futhat
await dload.WaitAsync(TimeSpan.FromSeconds(10));
NatÃv memória allokáció
Platform invoke esetén szükségünk lehet natÃv memória allokálására, hogy a natÃv hÃvásunk értéket tudjon visszaadni. Ennek a mikéntjét egyszerűsÃti a NativeMemory osztály Alloc metódusa, ami lényegében a C# megfelelÅ‘je a malloc c hÃvásnak. Nem meglepÅ‘ módon a NativeMemory osztály metódusait unsafe kontextusban használhatjuk.
using System.Runtime.InteropServices;
unsafe
{
//100 byte allokálása
byte* buffer = (byte*)NativeMemory.Alloc(100);
//natÃv memória felszabadÃtása
NativeMemory.Free(buffer);
}
Parallel.ForEachAsync
Hasonló a Parallel.ForEach metódusához. Több Task párhuzamosÃtására jó egy olyan kollekció esetén, ami implementálja az IAsyncEnumerable 2 felületet:
List<int> numbers = new List<int>(100) { 1, 2, 3 };
//Mivel Task a visszatérése, await-el várakozhatunk rá
await Parallel.ForEachAsync(numbers,
async (item, cancellationToken) =>
{
await Task.Delay(item);
});
A fenti példában a cancellationToken egy kötelezÅ‘ paramétere az aszinkron delegáltnak. Ezt használhatjuk arra, hogy kultúráltan megszakÃtsuk a párhuzamosan futtatott Task-ot.
-
A kriptográfia számára megfelelÅ‘ véletlenszám generátorokat kriptográfiailag biztonságos pszeudó véletlenszám generátornak nevezzük (CSPRNG). Két feltételt kell teljesÃtenie egy ilyen algoritmusnak: át kell mennie a következÅ‘ bit teszten és ki kell állnia az állapot kompromittálódási tesztet. Egy bitsorozat átmegy a következÅ‘ bit teszten, ha a támadó a bitsorozat bármely i-edik bit elÅ‘tti sorozatot ismerve nem képes megmondani belátható idÅ‘n belül i+1 bit értékét matematikai számÃtásokkal levezetve. Amennyiben a támadónak sikerült kitalálnia a véletlenszám-generátor jelenlegi állapotát, és ennek ismeretében sikerül kitalálnia a következÅ‘ állapotot, akkor az algoritmus megbukott az állapot kompromittálódási teszten.↩
-
Lásd Aszinkron IEnumerable↩