Socket.SendAsync 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
SendAsync(ReadOnlyMemory<Byte>, CancellationToken) |
在連接的通訊端上傳送資料。 |
SendAsync(IList<ArraySegment<Byte>>, SocketFlags) |
在連接的通訊端上傳送資料。 |
SendAsync(ArraySegment<Byte>, SocketFlags) |
在連接的通訊端上傳送資料。 |
SendAsync(ReadOnlyMemory<Byte>, SocketFlags, CancellationToken) |
在連接的通訊端上傳送資料。 |
SendAsync(IList<ArraySegment<Byte>>) |
在連接的通訊端上傳送資料。 |
SendAsync(ArraySegment<Byte>) |
在連接的通訊端上傳送資料。 |
SendAsync(SocketAsyncEventArgs) |
將資料以非同步方式傳送至已連接的 Socket 物件。 |
SendAsync(ReadOnlyMemory<Byte>, CancellationToken)
在連接的通訊端上傳送資料。
public System.Threading.Tasks.ValueTask<int> SendAsync (ReadOnlyMemory<byte> buffer, System.Threading.CancellationToken cancellationToken = default);
member this.SendAsync : ReadOnlyMemory<byte> * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function SendAsync (buffer As ReadOnlyMemory(Of Byte), Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)
參數
- buffer
- ReadOnlyMemory<Byte>
要傳送之資料的緩衝區。
- cancellationToken
- CancellationToken
可用來取消非同步作業的解除標記。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
取消權杖已取消。 此例外狀況會儲存在傳回的工作中。
適用於
SendAsync(IList<ArraySegment<Byte>>, SocketFlags)
在連接的通訊端上傳送資料。
public:
System::Threading::Tasks::Task<int> ^ SendAsync(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags);
public System.Threading.Tasks.Task<int> SendAsync (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags);
member this.SendAsync : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags -> System.Threading.Tasks.Task<int>
Public Function SendAsync (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags) As Task(Of Integer)
參數
- buffers
- IList<ArraySegment<Byte>>
要傳送之資料的緩衝區清單。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合,會在傳送資料時使用。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
buffers
為 null
。
嘗試存取通訊端時發生錯誤。
備註
這個方法會儲存在工作中,它會傳回方法同步對應專案可以擲回的所有非使用狀況例外狀況。 如果例外狀況儲存在傳回的工作中,則會在等候工作時擲回該例外狀況。 使用狀況例外狀況,例如 ArgumentException ,仍會同步擲回。 如需預存的例外狀況,請參閱 所 Send(IList<ArraySegment<Byte>>, SocketFlags) 擲回的例外狀況。
適用於
SendAsync(ArraySegment<Byte>, SocketFlags)
在連接的通訊端上傳送資料。
public:
System::Threading::Tasks::Task<int> ^ SendAsync(ArraySegment<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags);
public System.Threading.Tasks.Task<int> SendAsync (ArraySegment<byte> buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.SendAsync : ArraySegment<byte> * System.Net.Sockets.SocketFlags -> System.Threading.Tasks.Task<int>
Public Function SendAsync (buffer As ArraySegment(Of Byte), socketFlags As SocketFlags) As Task(Of Integer)
參數
- buffer
- ArraySegment<Byte>
要傳送之資料的緩衝區。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合,會在傳送資料時使用。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
嘗試存取通訊端時發生錯誤。
適用於
SendAsync(ReadOnlyMemory<Byte>, SocketFlags, CancellationToken)
在連接的通訊端上傳送資料。
public System.Threading.Tasks.ValueTask<int> SendAsync (ReadOnlyMemory<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Threading.CancellationToken cancellationToken = default);
member this.SendAsync : ReadOnlyMemory<byte> * System.Net.Sockets.SocketFlags * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function SendAsync (buffer As ReadOnlyMemory(Of Byte), socketFlags As SocketFlags, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)
參數
- buffer
- ReadOnlyMemory<Byte>
要傳送之資料的緩衝區。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合,會在傳送資料時使用。
- cancellationToken
- CancellationToken
可用來取消非同步作業的解除標記。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
嘗試存取通訊端時發生錯誤。
取消權杖已取消。 此例外狀況會儲存在傳回的工作中。
適用於
SendAsync(IList<ArraySegment<Byte>>)
在連接的通訊端上傳送資料。
public:
System::Threading::Tasks::Task<int> ^ SendAsync(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers);
public System.Threading.Tasks.Task<int> SendAsync (System.Collections.Generic.IList<ArraySegment<byte>> buffers);
member this.SendAsync : System.Collections.Generic.IList<ArraySegment<byte>> -> System.Threading.Tasks.Task<int>
Public Function SendAsync (buffers As IList(Of ArraySegment(Of Byte))) As Task(Of Integer)
參數
- buffers
- IList<ArraySegment<Byte>>
要傳送之資料的緩衝區清單。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
buffers
為 null
。
嘗試存取通訊端時發生錯誤。
備註
這個方法會儲存在工作中,它會傳回方法同步對應專案可以擲回的所有非使用狀況例外狀況。 如果例外狀況儲存在傳回的工作中,則會在等候工作時擲回該例外狀況。 使用狀況例外狀況,例如 ArgumentException ,仍會同步擲回。 如需預存的例外狀況,請參閱 所 Send(IList<ArraySegment<Byte>>) 擲回的例外狀況。
適用於
SendAsync(ArraySegment<Byte>)
在連接的通訊端上傳送資料。
public:
System::Threading::Tasks::Task<int> ^ SendAsync(ArraySegment<System::Byte> buffer);
public System.Threading.Tasks.Task<int> SendAsync (ArraySegment<byte> buffer);
member this.SendAsync : ArraySegment<byte> -> System.Threading.Tasks.Task<int>
Public Function SendAsync (buffer As ArraySegment(Of Byte)) As Task(Of Integer)
參數
- buffer
- ArraySegment<Byte>
要傳送之資料的緩衝區。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
嘗試存取通訊端時發生錯誤。
適用於
SendAsync(SocketAsyncEventArgs)
- 來源:
- Socket.cs
- 來源:
- Socket.cs
- 來源:
- Socket.cs
將資料以非同步方式傳送至已連接的 Socket 物件。
public:
bool SendAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool SendAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.SendAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function SendAsync (e As SocketAsyncEventArgs) As Boolean
參數
SocketAsyncEventArgs 物件,用於這個非同步通訊端作業。
傳回
若 I/O 作業暫止,則為 true
。 作業完成時會引發與 e
參數有關的 Completed 事件。
若 I/O 作業同步完成,則為 false
。 在這個情況下,就不會引發與 e
參數有關的 Completed 事件,而在方法呼叫傳回後會立即檢查做為參數傳遞的 e
物件,以擷取作業的結果。
例外狀況
e
參數上的 Buffer 或 BufferList 屬性必須參考有效的緩衝區。 這兩個屬性可能有一個已經設定,但不會同時都已設定。
通訊端作業已使用 e
參數內指定的 SocketAsyncEventArgs 物件正在進行中。
尚未透過 Socket、Accept() 或 AcceptAsync(SocketAsyncEventArgs) 方法取得 BeginAccept,或尚未連接。
備註
方法 SendAsync 可用來從連接導向通訊端上的一或多個緩衝區寫入傳出資料。 不過,這個方法也可以在連線作業上指定遠端主機的無連線通訊端上使用。
方法會 SendAsync 啟動非同步傳送作業至在 、 AcceptAsync 、 BeginAccept 、 BeginConnect 、 Connect 或 ConnectAsync 方法中 Accept 建立的遠端主機。
需要物件的下列屬性和事件 System.Net.Sockets.SocketAsyncEventArgs ,才能成功呼叫這個方法:
SocketAsyncEventArgs.Buffer 或 SocketAsyncEventArgs.BufferList
SocketAsyncEventArgs.Count 如果 已設定,則 SocketAsyncEventArgs.Buffer 為
SocketAsyncEventArgs.Offset 如果 已設定,則 SocketAsyncEventArgs.Buffer 為
呼叫端可以在呼叫 SendAsync 方法之前,將 屬性設定 SocketAsyncEventArgs.UserToken 為任何所需的使用者狀態物件,以便在回呼方法中擷取資訊。 如果回呼需要比單一物件更多的資訊,則可以建立小型類別,以將其他必要狀態資訊保留為成員。
如果您未第一次呼叫 Accept 、、、 BeginConnectBeginAcceptConnect 或 ConnectAsync , AcceptAsync 此方法 SendAsync 將會擲回例外狀況。
SendAsync呼叫 方法可讓您在個別的執行執行緒內傳送資料。
針對訊息導向通訊端,請勿超過基礎 Windows 通訊端服務提供者的訊息大小上限。 如果資料太長而無法透過基礎服務提供者傳遞,則不會傳輸任何資料,而且 SendAsync 方法會擲 SocketException 回 ,並將 SocketAsyncEventArgs.SocketError 設定為原生 Winsock WSAEMSGSIZE 錯誤碼 (10040) 。
請注意,方法成功完成 SendAsync 並不會指出已成功傳遞資料。
另請參閱
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應