如何从异步回调中返回值

时间:2015-11-29 20:59:36

标签: c# asynchronous

我从另一个类调用方法ReceiveMessage()。如何将值aMessageReceiveCallback()返回到我调用ReceiveMessage()的类? aMessage是字符串类型的公共字段。

    public void ReceiveMessage()
    {
      socket.BeginReceive(messageBuffer,0,messageBuffer.Length,SocketFlags.None,ReceiveCallback,null);
    }

    void ReceiveCallback(IAsyncResult ar)
    {
        try
        {
            int rec = socket.EndReceive(ar);
            aMessage = Encoding.ASCII.GetString(messageBuffer, 0, rec);
        }
        catch(Exception ex) {
            Console.WriteLine("SEND ERROR\n{0}", ex.Message);
        }
    }

2 个答案:

答案 0 :(得分:0)

您可以为aMessage定义事件的类授予,并让调用ReceiveMessage()的类订阅它。因此,当数据准备就绪时会通知它。

答案 1 :(得分:0)

这确实是异步开始闪耀的地方。这样你就可以更好地做到这一点

public void ReceiveMessage()
{
    try {
       await socket.ReceiveAsync(messageBuffer,0,messageBuffer.Length,SocketFlags.None);
       aMessage = Encoding.ASCII.GetString(messageBuffer, 0, rec);
    } catch (Exception ex) {
       Console.WriteLine("SEND ERROR\n{0}", ex.Message);
    }
}

现在,await行之后的代码将在收到消息后执行