预计与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);
}
是不是回调允许为'null'? – svick
@svick我实际上并不是100%肯定的 - 文档中没有指定它是可选的(我认为它是依赖于实现的),我不确定'Socket.BeginSend'是否存在它... –
有socket.EndSend发生错误“无法从方法组中选择方法,您是否打算调用该方法?” –