C# 如何从异步回调返回值

C# 如何从异步回调返回值,c#,asynchronous,C#,Asynchronous,我从另一个类调用方法ReceiveMessage()。如何将ReceiveCallback()中的值aMessage返回到我调用的类ReceiveMessage()aMessage是字符串类型的公共字段 public void ReceiveMessage() { socket.BeginReceive(messageBuffer,0,messageBuffer.Length,SocketFlags.None,ReceiveCallback,null); }

我从另一个类调用方法
ReceiveMessage()
。如何将
ReceiveCallback()
中的值
aMessage
返回到我调用的类
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);
        }
    }

您可以给定义了
aMessage
的类一个事件,并让调用
ReceiveMessage()
的类订阅它。因此,当数据准备就绪时,将通知它。

这才是异步真正开始发挥作用的地方。这样你就能更认真地做了

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);
    }
}

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

简言之,您不需要执行,因为没有地方实际捕获返回值调用
ReceiveMessage
的方法是异步方法吗?如果没有,是否要等到收到回调?您有很多选择。将回调作为参数传递给ReceiveMessage,或者让调用类订阅ReceiveMessage所在的事件,并在ReceiveCallback中使用消息调用事件委托,等等。我在循环中重复以下说明:1。我异步发送数据2。我收到一条消息,通知他们有可能发送数据3。如果接收到的消息==“Next”转到接收数据的循环的下一次迭代,因为当我在方法
ReceiveCallback()
和调用
ReceiveMessage()
的类中
ReceiveMessage()
之后的下一条指令中给出断点时。。。ReceiveMessage()的指令比ReceiveCallback()执行得更快。