VB .Net非同期ソケットメソッドを使用する場合、コールバック関数をどのように定義する必要がありますか?
Private Sub ServerRunTime(Optional ByRef ListeningAddress As String = "", Optional ByRef Port As Short = 31337)
Dim Listener As Socket = ConfigListener(ListeningAddress, Port)
Listener.Listen(32)
Listener.BeginAccept(New AsyncCallback(AddressOf OnAccept), Listener)
End Sub
Private Sub OnAccept(ByVal AcceptResult As IAsyncResult)
Dim Listener As Socket = CType(AcceptResult.AsyncState, Socket)
Dim aClientObj As New ClientObj
Dim ClientID As Integer = Clients.Count
aClientObj.ClientSok = Listener.EndAccept(AcceptResult)
aClientObj.ClientID = ClientID
Clients.Add(aClientObj)
Clients(ClientID).ClientSok.BeginReceive(Clients(ClientID).RecvBuffer, 0, Clients(ClientID).RecvBuffer.Length, SocketFlags.None, AddressOf OnReceive, ClientID)
Listener.BeginAccept(New AsyncCallback(AddressOf OnAccept), Listener)
End Sub
上記のコードサンプルでは、両方をテストしました
New AsyncCallback(AddressOf OnReceive)
と
AddressOf OnReceive
どちらも同じ結果になります。
では、どちらが正しいのでしょうか。また、AsyncCallbackオブジェクトを変数として作成して、受信するたびに新しいオブジェクトを作成する必要をなくすことはできますか?