Socket.ReceiveAsync 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
ReceiveAsync(ArraySegment<Byte>) |
接收连接的套接字发出的数据。 |
ReceiveAsync(IList<ArraySegment<Byte>>) |
接收连接的套接字发出的数据。 |
ReceiveAsync(SocketAsyncEventArgs) |
开始一个异步请求以便从连接的 Socket 对象中接收数据。 |
ReceiveAsync(ArraySegment<Byte>, SocketFlags) |
接收连接的套接字发出的数据。 |
ReceiveAsync(IList<ArraySegment<Byte>>, SocketFlags) |
接收连接的套接字发出的数据。 |
ReceiveAsync(Memory<Byte>, CancellationToken) |
接收连接的套接字发出的数据。 |
ReceiveAsync(Memory<Byte>, SocketFlags, CancellationToken) |
接收连接的套接字发出的数据。 |
ReceiveAsync(ArraySegment<Byte>)
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
接收连接的套接字发出的数据。
public:
System::Threading::Tasks::Task<int> ^ ReceiveAsync(ArraySegment<System::Byte> buffer);
public System.Threading.Tasks.Task<int> ReceiveAsync (ArraySegment<byte> buffer);
member this.ReceiveAsync : ArraySegment<byte> -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffer As ArraySegment(Of Byte)) As Task(Of Integer)
参数
- buffer
- ArraySegment<Byte>
接收的数据的缓冲区。
返回
以收到的字节数完成的异步任务。
例外
尝试访问套接字时出错。
适用于
ReceiveAsync(IList<ArraySegment<Byte>>)
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
接收连接的套接字发出的数据。
public:
System::Threading::Tasks::Task<int> ^ ReceiveAsync(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers);
public System.Threading.Tasks.Task<int> ReceiveAsync (System.Collections.Generic.IList<ArraySegment<byte>> buffers);
member this.ReceiveAsync : System.Collections.Generic.IList<ArraySegment<byte>> -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffers As IList(Of ArraySegment(Of Byte))) As Task(Of Integer)
参数
- buffers
- IList<ArraySegment<Byte>>
接收的数据的缓冲区列表。
返回
以收到的字节数完成的异步任务。
例外
参数 buffers
为 null。
尝试访问套接字时出错。
注解
此方法存储在任务中,它返回该方法的同步对应项可能引发的所有非使用异常。 如果异常存储在返回的任务中,则在等待任务时将引发该异常。 使用异常(如 ArgumentException)仍会同步引发。 有关存储的异常,请参阅 引发的 Receive(IList<ArraySegment<Byte>>)异常。
适用于
ReceiveAsync(SocketAsyncEventArgs)
- Source:
- Socket.cs
- Source:
- Socket.cs
- Source:
- Socket.cs
开始一个异步请求以便从连接的 Socket 对象中接收数据。
public:
bool ReceiveAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool ReceiveAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.ReceiveAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function ReceiveAsync (e As SocketAsyncEventArgs) As Boolean
参数
要用于此异步套接字操作的 SocketAsyncEventArgs 对象。
返回
如果 I/O 操作挂起,则为 true
。 操作完成时,将引发 e
参数的 Completed 事件。
如果 I/O 操作同步完成,则为 false
。 在这种情况下,将不会引发 e
参数的 Completed 事件,并且可能在方法调用返回后立即检查作为参数传递的 e
对象以检索操作的结果。
例外
参数无效。
e
参数的 Buffer 或 BufferList 属性必须引用有效的缓冲区。 可以设置这两个属性中的某一个,但不能同时设置这两个属性。
已经在使用 e
参数中指定的 SocketAsyncEventArgs 对象执行套接字操作。
尝试访问套接字时出错。
注解
方法 ReceiveAsync 用于连接的套接字或绑定的无连接套接字,并用于读取传入数据。 套接字的本地地址必须已知。
对于绑定的无连接套接字,此函数限制接收消息的地址。 函数仅从连接中指定的远程地址返回消息。 来自其他地址的消息将被无提示丢弃。
SocketAsyncEventArgs.SocketFlags参数上的 e
属性为窗口套接字服务提供程序提供有关读取请求的其他信息。 有关如何使用此参数的详细信息,请参阅 System.Net.Sockets.SocketFlags。
对象上的 System.Net.Sockets.SocketAsyncEventArgs 以下属性和事件是成功调用此方法所必需的:
SocketAsyncEventArgs.Buffer 或 SocketAsyncEventArgs.BufferList
SocketAsyncEventArgs.Count 如果 SocketAsyncEventArgs.Buffer 已设置
SocketAsyncEventArgs.Offset 如果 SocketAsyncEventArgs.Buffer 已设置
调用方可以在调用 ReceiveAsync 方法之前将 属性设置为SocketAsyncEventArgs.UserToken所需的任何用户状态对象,以便在回调方法中检索信息。 如果回调需要比单个对象更多的信息,则可以创建一个小类来保存其他所需的状态信息作为成员。
对于字节流式套接字,传入数据将放入缓冲区,直到缓冲区已填充、连接关闭或内部缓冲的数据耗尽。
对于面向消息的套接字,传入消息将放入缓冲区中,最大大小为与 e
参数关联的缓冲区的总大小。 如果消息大于缓冲区,则缓冲区将填充消息的第一部分。
对于面向连接的套接字, ReceiveAsync 方法可以通过两种方式之一指示虚拟线路的正常终止,具体取决于套接字是面向字节流还是面向消息。 对于字节流,已读取的零个字节表示正常关闭,并且不再读取更多字节。 对于通常允许零字节消息的面向消息的套接字,SocketExceptionSocketAsyncEventArgs.SocketError将 设置为本机 Winsock WSAEDISCON 错误代码的 (10101) 用于指示正常关闭。 在任何情况下,SocketExceptionSocketAsyncEventArgs.SocketError设置为本机 Winsock WSAECONNRESET 错误代码的 (10054) 表示发生了中止关闭。
另请参阅
适用于
ReceiveAsync(ArraySegment<Byte>, SocketFlags)
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
接收连接的套接字发出的数据。
public:
System::Threading::Tasks::Task<int> ^ ReceiveAsync(ArraySegment<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags);
public System.Threading.Tasks.Task<int> ReceiveAsync (ArraySegment<byte> buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.ReceiveAsync : ArraySegment<byte> * System.Net.Sockets.SocketFlags -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffer As ArraySegment(Of Byte), socketFlags As SocketFlags) As Task(Of Integer)
参数
- buffer
- ArraySegment<Byte>
接收的数据的缓冲区。
- socketFlags
- SocketFlags
SocketFlags 值的按位组合,将在接收数据时使用。
返回
以收到的字节数完成的异步任务。
例外
尝试访问套接字时出错。
适用于
ReceiveAsync(IList<ArraySegment<Byte>>, SocketFlags)
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
接收连接的套接字发出的数据。
public:
System::Threading::Tasks::Task<int> ^ ReceiveAsync(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags);
public System.Threading.Tasks.Task<int> ReceiveAsync (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags);
member this.ReceiveAsync : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags) As Task(Of Integer)
参数
- buffers
- IList<ArraySegment<Byte>>
接收的数据的缓冲区列表。
- socketFlags
- SocketFlags
SocketFlags 值的按位组合,将在接收数据时使用。
返回
以收到的字节数完成的异步任务。
例外
参数 buffers
为 null。
尝试访问套接字时出错。
注解
此方法存储在任务中,它返回该方法的同步对应项可能引发的所有非使用异常。 如果异常存储在返回的任务中,则在等待任务时将引发该异常。 使用异常(如 ArgumentException)仍会同步引发。 有关存储的异常,请参阅 引发的 Receive(IList<ArraySegment<Byte>>, SocketFlags)异常。
适用于
ReceiveAsync(Memory<Byte>, CancellationToken)
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
接收连接的套接字发出的数据。
public System.Threading.Tasks.ValueTask<int> ReceiveAsync (Memory<byte> buffer, System.Threading.CancellationToken cancellationToken = default);
member this.ReceiveAsync : Memory<byte> * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function ReceiveAsync (buffer As Memory(Of Byte), Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)
参数
- cancellationToken
- CancellationToken
可用于取消异步操作的取消标记。
返回
以收到的字节数完成的异步任务。
例外
尝试访问套接字时出错。
取消令牌已取消。 此异常存储在返回的任务中。
适用于
ReceiveAsync(Memory<Byte>, SocketFlags, CancellationToken)
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
- Source:
- Socket.Tasks.cs
接收连接的套接字发出的数据。
public System.Threading.Tasks.ValueTask<int> ReceiveAsync (Memory<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Threading.CancellationToken cancellationToken = default);
member this.ReceiveAsync : Memory<byte> * System.Net.Sockets.SocketFlags * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function ReceiveAsync (buffer As Memory(Of Byte), socketFlags As SocketFlags, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)
参数
- socketFlags
- SocketFlags
SocketFlags 值的按位组合,将在接收数据时使用。
- cancellationToken
- CancellationToken
可用于取消异步操作的取消标记。
返回
以收到的字节数完成的异步任务。
例外
尝试访问套接字时出错。
取消令牌已取消。 此异常存储在返回的任务中。