CryptoStream Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Definiál egy adatfolyamot, amely az adatfolyamokat titkosítási átalakításokhoz kapcsolja.
public ref class CryptoStream : System::IO::Stream
public class CryptoStream : System.IO.Stream
[System.Runtime.InteropServices.ComVisible(true)]
public class CryptoStream : System.IO.Stream
type CryptoStream = class
inherit Stream
interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type CryptoStream = class
inherit Stream
interface IDisposable
Public Class CryptoStream
Inherits Stream
- Öröklődés
- Öröklődés
- Attribútumok
- Megvalósítás
Példák
Az alábbi példa bemutatja, hogyan lehet sztringet CryptoStream titkosítani. Ez a metódus a Aes megadott Key és inicializálási vektorral (IV) rendelkező osztályt használja.
using System;
using System.IO;
using System.Security.Cryptography;
class AesExample
{
public static void Main()
{
try
{
string original = "Here is some data to encrypt!";
// Create a new instance of the Aes class.
// This generates a new key and initialization vector (IV).
using (Aes myAes = Aes.Create())
{
// Encrypt the string to an array of bytes.
byte[] encrypted = EncryptStringToBytes(original, myAes.Key, myAes.IV);
// Decrypt the bytes to a string.
string roundtrip = DecryptStringFromBytes(encrypted, myAes.Key, myAes.IV);
// Display the original data and the decrypted data.
Console.WriteLine("Original: {0}", original);
Console.WriteLine("Round trip: {0}", roundtrip);
}
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e.Message);
}
}
static byte[] EncryptStringToBytes(string plainText, byte[] Key, byte[] IV)
{
// Check arguments.
if (plainText == null || plainText.Length <= 0)
throw new ArgumentNullException(nameof(plainText));
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException(nameof(Key));
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException(nameof(IV));
byte[] encrypted;
// Create a Aes object with the specified key and IV.
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
// Create an encryptor to perform the stream transform.
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new())
{
using (CryptoStream csEncrypt = new(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new(csEncrypt))
{
// Write all data to the stream.
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}
}
// Return the encrypted bytes from the memory stream.
return encrypted;
}
static string DecryptStringFromBytes(byte[] cipherText, byte[] Key, byte[] IV)
{
// Check arguments.
if (cipherText == null || cipherText.Length <= 0)
throw new ArgumentNullException(nameof(cipherText));
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException(nameof(Key));
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException(nameof(IV));
// Declare the string used to hold the decrypted text.
string plaintext = null;
// Create a Aes object with the specified key and IV.
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
// Create a decryptor to perform the stream transform.
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
// Create the streams used for decryption.
using (MemoryStream msDecrypt = new(cipherText))
{
using (CryptoStream csDecrypt = new(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new(csDecrypt))
{
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
plaintext = srDecrypt.ReadToEnd();
}
}
}
}
return plaintext;
}
}
Imports System.IO
Imports System.Security.Cryptography
Class AesExample
Public Shared Sub Main()
Try
Dim original As String = "Here is some data to encrypt!"
' Create a new instance of the Aes class.
' This generates a new key and initialization vector (IV).
Using myAes = Aes.Create()
' Encrypt the string to an array of bytes.
Dim encrypted As Byte() = EncryptStringToBytes(original, myAes.Key, myAes.IV)
' Decrypt the bytes to a string.
Dim roundtrip As String = DecryptStringFromBytes(encrypted, myAes.Key, myAes.IV)
'Display the original data and the decrypted data.
Console.WriteLine("Original: {0}", original)
Console.WriteLine("Round Trip: {0}", roundtrip)
End Using
Catch e As Exception
Console.WriteLine("Error: {0}", e.Message)
End Try
End Sub
Shared Function EncryptStringToBytes(ByVal plainText As String, ByVal Key() As Byte, ByVal IV() As Byte) As Byte()
' Check arguments.
If plainText Is Nothing OrElse plainText.Length <= 0 Then
Throw New ArgumentNullException(NameOf(plainText))
End If
If Key Is Nothing OrElse Key.Length <= 0 Then
Throw New ArgumentNullException(NameOf(Key))
End If
If IV Is Nothing OrElse IV.Length <= 0 Then
Throw New ArgumentNullException(NameOf(IV))
End If
Dim encrypted() As Byte
' Create an Aes object with the specified key and IV.
Using aesAlg = Aes.Create()
aesAlg.Key = Key
aesAlg.IV = IV
' Create an encryptor to perform the stream transform.
Dim encryptor As ICryptoTransform = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV)
' Create the streams used for encryption.
Using msEncrypt As New MemoryStream()
Using csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
Using swEncrypt As New StreamWriter(csEncrypt)
' Write all data to the stream.
swEncrypt.Write(plainText)
End Using
encrypted = msEncrypt.ToArray()
End Using
End Using
End Using
' Return the encrypted bytes from the memory stream.
Return encrypted
End Function 'EncryptStringToBytes
Shared Function DecryptStringFromBytes(
ByVal cipherText() As Byte,
ByVal Key() As Byte,
ByVal IV() As Byte) As String
' Check arguments.
If cipherText Is Nothing OrElse cipherText.Length <= 0 Then
Throw New ArgumentNullException(NameOf(cipherText))
End If
If Key Is Nothing OrElse Key.Length <= 0 Then
Throw New ArgumentNullException(NameOf(Key))
End If
If IV Is Nothing OrElse IV.Length <= 0 Then
Throw New ArgumentNullException(NameOf(IV))
End If
' Declare the string used to hold the decrypted text.
Dim plaintext As String = Nothing
' Create an Aes object with the specified key and IV.
Using aesAlg = Aes.Create()
aesAlg.Key = Key
aesAlg.IV = IV
' Create a decryptor to perform the stream transform.
Dim decryptor As ICryptoTransform = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV)
' Create the streams used for decryption.
Using msDecrypt As New MemoryStream(cipherText)
Using csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)
Using srDecrypt As New StreamReader(csDecrypt)
' Read the decrypted bytes from the decrypting stream
' and place them in a string.
plaintext = srDecrypt.ReadToEnd()
End Using
End Using
End Using
End Using
Return plaintext
End Function 'DecryptStringFromBytes
End Class
Megjegyzések
A közös nyelvi futtatókörnyezet a titkosításhoz streamorientált kialakítást használ. Ennek a kialakításnak a lényege a CryptoStream. A implementált CryptoStream titkosítási objektumok összeláncolhatók a implementált Streamobjektumokkal, így az egyik objektum streamelt kimenete egy másik objektum bemenetébe is betáplálható. A köztes eredményt (az első objektum kimenetét) nem kell külön tárolni.
Important
A .NET 6-os és újabb verzióiban, amikor Stream.Read vagy Stream.ReadAsync meghívása N hosszúságú pufferrel történik, a művelet akkor fejeződik be, ha legalább 1 bájtot olvas be a streamből, vagy a mögöttes adatfolyam, amelyet körbefut, 0-t ad vissza a Read hívásából, jelezve, hogy nincs több adat. A .NET-keretrendszerben Stream.Read és Stream.ReadAsync csak akkor tér vissza, ha az összes N bájt be nem olvasható a streamből, vagy a mögöttes stream 0 értéket ad vissza a Read hívásából. Ha a kód feltételezi, hogy a Read metódusok mindaddig nem térnek vissza, amíg az összes N bájt be nem olvasható, előfordulhat, hogy nem olvassa be az összes tartalmat. További információ: Részleges és nulla bájtos olvasás streamekben.
A metódus meghívásával mindig explicit módon zárja be az CryptoStream objektumot, miután befejezte a Clear használatát. Ezzel kiüríti a mögöttes adatfolyamot, és az objektum az összes fennmaradó adatblokkot feldolgozhatja CryptoStream . Ha azonban kivétel történik a metódus meghívása Close előtt, előfordulhat, hogy az CryptoStream objektum nem lesz bezárva. Annak érdekében, hogy a Close metódus mindig meghívható legyen, helyezze a hívást a Clear metódushoz egyfinallytry/catch utasításblokkon belül.
Ez a típus implementálja a IDisposable felületet. Ha befejezte a típus használatát, a metódus meghívásával közvetlenül vagy közvetve el kell helyeznie Clear azt, ami pedig a implementációt IDisposable hívja meg. A típus közvetlen ártalmatlanításához hívja meg a Clear metódust egy try/catch blokkban. Ha közvetve szeretné megsemmisíteni, használjon olyan nyelvi szerkezetet, mint a using (C#-ban) vagy Using (a Visual Basicben).
Konstruktorok
| Name | Description |
|---|---|
| CryptoStream(Stream, ICryptoTransform, CryptoStreamMode, Boolean) |
Inicializálja a CryptoStream osztály új példányát. |
| CryptoStream(Stream, ICryptoTransform, CryptoStreamMode) |
Inicializálja az CryptoStream osztály új példányát egy céladatfolyammal, a használni kívánt átalakítással és a stream módjával. |
Tulajdonságok
| Name | Description |
|---|---|
| CanRead |
Beolvas egy értéket, amely jelzi, hogy az áram CryptoStream olvasható-e. |
| CanSeek |
Egy értéket kap, amely jelzi, hogy az aktuálison CryptoStreambelül kereshet-e. |
| CanTimeout |
Olyan értéket kap, amely meghatározza, hogy az aktuális stream időtúllépést okozhat-e. (Öröklődés forrása Stream) |
| CanWrite |
Beolvas egy értéket, amely jelzi, hogy az áram CryptoStream írható-e. |
| HasFlushedFinalBlock |
Beolvas egy értéket, amely jelzi, hogy a végső pufferblokk meg lett-e írva az alapul szolgáló adatfolyamba. |
| Length |
Lekéri a stream bájtban megadott hosszát. |
| Position |
Lekéri vagy beállítja az aktuális streamen belüli pozíciót. |
| ReadTimeout |
Ezredmásodpercben lekéri vagy beállítja azt az értéket, amely meghatározza, hogy a stream mennyi ideig kísérel meg olvasni, mielőtt túllépi az időkorlátot. (Öröklődés forrása Stream) |
| WriteTimeout |
Ezredmásodpercben lekéri vagy beállít egy értéket, amely meghatározza, hogy a stream mennyi ideig kísérel meg írni, mielőtt időtúllépést végezne. (Öröklődés forrása Stream) |
Metódusok
| Name | Description |
|---|---|
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Aszinkron olvasási műveletet kezd. (Fontolja meg a használatot ReadAsync .) |
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Aszinkron olvasási műveletet kezd. (Fontolja meg a használatot ReadAsync(Byte[], Int32, Int32) .) (Öröklődés forrása Stream) |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Aszinkron írási műveletet kezd. (Fontolja meg a használatot WriteAsync .) |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Aszinkron írási műveletet kezd. (Fontolja meg a használatot WriteAsync(Byte[], Int32, Int32) .) (Öröklődés forrása Stream) |
| Clear() |
Felszabadítja a .-hez használt összes erőforrást CryptoStream. |
| Close() |
Bezárja az aktuális streamet, és felszabadítja az aktuális adatfolyamhoz társított összes erőforrást (például szoftvercsatornákat és fájlfogópontokat). |
| Close() |
Bezárja az aktuális streamet, és felszabadítja az aktuális adatfolyamhoz társított összes erőforrást (például szoftvercsatornákat és fájlfogópontokat). A metódus meghívása helyett győződjön meg arról, hogy a stream megfelelően van elosztva. (Öröklődés forrása Stream) |
| CopyTo(Stream, Int32) |
Beolvassa a mögöttes adatfolyam bájtjait, alkalmazza a megfelelő titkosítási átalakításokat, és az eredményt a célstreambe írja. |
| CopyTo(Stream, Int32) |
Beolvassa a bájtokat az aktuális streamből, és egy megadott pufferméret használatával egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki. (Öröklődés forrása Stream) |
| CopyTo(Stream) |
Beolvassa a bájtokat az aktuális streamből, és egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki. (Öröklődés forrása Stream) |
| CopyToAsync(Stream, CancellationToken) |
Aszinkron módon beolvassa a bájtokat az aktuális streamből, és egy megadott lemondási jogkivonat használatával egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki. (Öröklődés forrása Stream) |
| CopyToAsync(Stream, Int32, CancellationToken) |
Aszinkron módon beolvassa a mögöttes adatfolyam bájtjait, alkalmazza a megfelelő titkosítási átalakításokat, és az eredményt a célstreambe írja. |
| CopyToAsync(Stream, Int32, CancellationToken) |
Aszinkron módon beolvassa a bájtokat az aktuális streamből, és egy megadott pufferméret és lemondási jogkivonat használatával egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki. (Öröklődés forrása Stream) |
| CopyToAsync(Stream, Int32) |
Aszinkron módon beolvassa a bájtokat az aktuális adatfolyamból, és egy megadott puffermérettel egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki. (Öröklődés forrása Stream) |
| CopyToAsync(Stream) |
Aszinkron módon beolvassa a bájtokat az aktuális streamből, és egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki. (Öröklődés forrása Stream) |
| CreateObjRef(Type) |
Létrehoz egy objektumot, amely tartalmazza a távoli objektumokkal való kommunikációhoz használt proxy létrehozásához szükséges összes releváns információt. (Öröklődés forrása MarshalByRefObject) |
| CreateWaitHandle() |
Elavult.
Elavult.
Elavult.
Objektum lefoglalása WaitHandle . (Öröklődés forrása Stream) |
| Dispose() |
Felszabadítja a .-hez használt összes erőforrást Stream. (Öröklődés forrása Stream) |
| Dispose(Boolean) |
Felszabadítja a felügyelt erőforrások által CryptoStream használt nem felügyelt erőforrásokat, és opcionálisan felszabadítja a felügyelt erőforrásokat. |
| DisposeAsync() |
Aszinkron módon felszabadítja a nem felügyelt erőforrásokat, amelyeket a CryptoStream. |
| EndRead(IAsyncResult) |
Megvárja, amíg a függőben lévő aszinkron olvasás befejeződik. (Fontolja meg a használatot ReadAsync .) |
| EndRead(IAsyncResult) |
Megvárja, amíg a függőben lévő aszinkron olvasás befejeződik. (Fontolja meg a használatot ReadAsync(Byte[], Int32, Int32) .) (Öröklődés forrása Stream) |
| EndWrite(IAsyncResult) |
Aszinkron írási művelet befejezése. (Fontolja meg a használatot WriteAsync .) |
| EndWrite(IAsyncResult) |
Aszinkron írási művelet befejezése. (Fontolja meg a használatot WriteAsync(Byte[], Int32, Int32) .) (Öröklődés forrása Stream) |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| Finalize() |
Lehetővé teszi az objektumok számára, hogy megpróbálják felszabadítani az erőforrásokat, és más tisztítási műveleteket hajtsanak végre, mielőtt a szemétgyűjtés visszanyeri azt. |
| Flush() |
Törli az aktuális adatfolyam összes pufferét, és a pufferelt adatokat a mögöttes eszközre írja. |
| FlushAsync() |
Aszinkron módon törli az adatfolyam összes pufferét, és a pufferelt adatokat a mögöttes eszközre írja. (Öröklődés forrása Stream) |
| FlushAsync(CancellationToken) |
A jelenlegi stream összes pufferét aszinkron módon törli, a pufferelt adatokat a mögöttes eszközre írja, és figyeli a lemondási kérelmeket. |
| FlushFinalBlock() |
Frissíti a mögöttes adatforrást vagy adattárat a puffer aktuális állapotával, majd törli a puffert. |
| FlushFinalBlockAsync(CancellationToken) |
Aszinkron módon frissíti az alapul szolgáló adatforrást vagy adattárat a puffer aktuális állapotával, majd törli a puffert. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetLifetimeService() |
Elavult.
Lekéri a példány élettartamszabályzatát vezérlő aktuális élettartam-szolgáltatásobjektumot. (Öröklődés forrása MarshalByRefObject) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| InitializeLifetimeService() |
Elavult.
Beolvas egy élettartam-szolgáltatásobjektumot a példány élettartam-szabályzatának szabályozásához. (Öröklődés forrása MarshalByRefObject) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| MemberwiseClone(Boolean) |
Az aktuális MarshalByRefObject objektum sekély másolatát hozza létre. (Öröklődés forrása MarshalByRefObject) |
| ObjectInvariant() |
Elavult.
Támogatja a Contract. (Öröklődés forrása Stream) |
| Read(Byte[], Int32, Int32) |
Beolvassa az aktuális streamből származó bájtok sorozatát, és az olvasási bájtok számával előrelépteti a streamen belüli pozíciót. |
| Read(Span<Byte>) |
Ha egy származtatott osztályban felülbírált, beolvassa az aktuális adatfolyamból származó bájtok sorozatát, és az olvasási bájtok számával előrelép a streamben. (Öröklődés forrása Stream) |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Aszinkron módon olvas be egy bájtsort az aktuális streamből, az olvasási bájtok számával előrelép a streamben, és figyeli a lemondási kérelmeket. |
| ReadAsync(Byte[], Int32, Int32) |
Aszinkron módon beolvassa az aktuális adatfolyamból származó bájtok sorozatát, és az olvasási bájtok számával előrelépteti a streamen belüli pozíciót. (Öröklődés forrása Stream) |
| ReadAsync(Memory<Byte>, CancellationToken) |
Aszinkron módon beolvassa a bájtok sorozatát az aktuális adatfolyamból, az olvasási bájtok számával előrelép a streamben, és figyeli a lemondási kérelmeket. |
| ReadAsync(Memory<Byte>, CancellationToken) |
Aszinkron módon beolvassa a bájtok sorozatát az aktuális adatfolyamból, az olvasási bájtok számával előrelép a streamben, és figyeli a lemondási kérelmeket. (Öröklődés forrása Stream) |
| ReadAtLeast(Span<Byte>, Int32, Boolean) |
Legalább egy bájtot olvas be az aktuális adatfolyamból, és az olvasási bájtok számával előrelép a streamen belül. (Öröklődés forrása Stream) |
| ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Aszinkron módon legalább egy minimális bájtszámot olvas be az aktuális streamből, az olvasási bájtok számával előrelép a streamen belül, és figyeli a lemondási kérelmeket. (Öröklődés forrása Stream) |
| ReadByte() |
Beolvassa a bájtot a streamből, és egy bájttal előrelép a streamben, vagy -1 ad vissza, ha a stream végén van. |
| ReadByte() |
Beolvassa a bájtot a streamből, és egy bájttal előrelép a streamben, vagy -1 ad vissza, ha a stream végén van. (Öröklődés forrása Stream) |
| ReadExactly(Byte[], Int32, Int32) |
Beolvassa a bájtok |
| ReadExactly(Span<Byte>) |
Beolvassa a bájtokat az aktuális adatfolyamból, és a streamen belüli pozíciót a feltöltésig |
| ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Aszinkron módon beolvassa a bájtok |
| ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Aszinkron módon beolvassa a bájtokat az aktuális adatfolyamból, a streamen belüli pozíciót a feltöltésig |
| Seek(Int64, SeekOrigin) |
Beállítja az aktuális streamen belüli pozíciót. |
| SetLength(Int64) |
Az aktuális stream hosszát állítja be. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
| Write(Byte[], Int32, Int32) |
Bájtok sorozatát írja az aktuálisba CryptoStream , és a megírt bájtok számával előrelépteti a stream aktuális pozícióját. |
| Write(ReadOnlySpan<Byte>) |
Ha egy származtatott osztályban felülbírált, bájtok sorozatát írja az aktuális adatfolyamba, és a megírt bájtok számával előrelép a stream aktuális pozícióján. (Öröklődés forrása Stream) |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Bájtok sorozatát aszinkron módon írja az aktuális streambe, a megírt bájtok számával előrelépteti az aktuális pozíciót a streamben, és figyeli a lemondási kérelmeket. |
| WriteAsync(Byte[], Int32, Int32) |
Aszinkron módon bájtok sorozatát írja az aktuális adatfolyamba, és a megírt bájtok számával előrelépteti a stream aktuális pozícióját. (Öröklődés forrása Stream) |
| WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Aszinkron módon bájtok sorozatát írja az aktuális streambe, az aktuális pozíciót a streamen belül a megírt bájtok számával lépteti előre, és figyeli a lemondási kérelmeket. |
| WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Aszinkron módon bájtok sorozatát írja az aktuális streambe, az aktuális pozíciót a streamen belül a megírt bájtok számával lépteti előre, és figyeli a lemondási kérelmeket. (Öröklődés forrása Stream) |
| WriteByte(Byte) |
Bájtot ír a stream aktuális helyére, és egy bájttal előrelépteti a streamen belüli pozíciót. |
| WriteByte(Byte) |
Bájtot ír a stream aktuális helyére, és egy bájttal előrelépteti a streamen belüli pozíciót. (Öröklődés forrása Stream) |
Explicit interfész-implementációk
| Name | Description |
|---|---|
| IDisposable.Dispose() |
Ez az API a termékinfrastruktúrát támogatja, és közvetlenül a kódból nem használható. Felszabadítja az osztály aktuális példánya CryptoStream által használt erőforrásokat. |
Bővítő metódusok
| Name | Description |
|---|---|
| ConfigureAwait(IAsyncDisposable, Boolean) |
Konfigurálja, hogy az aszinkron eldobható feladatok hogyan lesznek végrehajtva. |
| CopyToAsync(Stream, PipeWriter, CancellationToken) |
Aszinkron módon beolvassa a bájtokat a Stream megadottból, és egy lemondási jogkivonat használatával írja őket a megadottba PipeWriter. |