预计与IAsyncResult BeginSend

预计与IAsyncResult BeginSend

问题描述:

方法嗨我想创建一个TAP包装。 ConnectTaskAsync很好,但是我在SendTaskAsync方面遇到了一些困难。预计与IAsyncResult BeginSend

public static Task ConnectTaskAsync(this Socket socket, EndPoint endpoint) 
     { 
      return Task.Factory.FromAsync(socket.BeginConnect, socket.EndConnect, endpoint, null); 
     } 

    public static Task<int> SendTaskAsync(this Socket socket, byte[] buffer, int offset, int size, SocketFlags flags) 
    { 
     return Task<int>.Factory.FromAsync(socket.BeginSend, buffer, offset, size, flags, socket.EndSend, null); 
    } 

我得到的错误是BeginSend下方的红色下划线预计与IAsyncResult的BeginSend的方法

哪儿我去错了消息?

您的FromAsync定义不正确。不幸的是,没有一个overload of FromAsync它接受4个单独的参数(这将需要BeginSend),所以你需要use a different overload

public static Task<int> SendTaskAsync(this Socket socket, byte[] buffer, int offset, int size, SocketFlags flags) 
{ 
    AsyncCallback nullOp = (i) => {}; 
    IAsyncResult result = socket.BeginSend(buffer, offset, size, flags, nullOp, socket); 
    // Use overload that takes an IAsyncResult directly 
    return Task.Factory.FromAsync(result, socket.EndSend); 
} 
+0

是不是回调允许为'null'? – svick

+0

@svick我实际上并不是100%肯定的 - 文档中没有指定它是可选的(我认为它是依赖于实现的),我不确定'Socket.BeginSend'是否存在它... –

+0

有socket.EndSend发生错误“无法从方法组中选择方法,您是否打算调用该方法?” –