0

我在让 sslstream 相互发送多条消息时遇到了一些麻烦。

我打电话给客户发送数据的方式

client.Send(objectOne);
client.Send(objectTwo);

我收到的错误消息是:

The BeginWrite method cannot be called when another write operation is pending

我已经尝试了不同的解决方案来让它工作,但没有一个能让它工作。

基函数使用 await,并且该函数被调用

// client send
public void Send(object data)
{
    byte[] sendData = SerializationHelper.Serialize(data);
    base.Send(sendData);
}
// base send
protected async void Send(byte[] data)
{
    await stream.WriteAsync(data, 0, data.Length);
}

基函数返回一个任务,并在客户端方法中使用 await

// client send
public async void Send(object data)
{
    byte[] sendData = SerializationHelper.Serialize(data);
    await base.Send(sendData);
}
// base send
protected async Task Send(byte[] data)
{
    await stream.WriteAsync(data, 0, data.Length);
}

我仍然收到同样的错误,有人知道让它工作吗?

4

1 回答 1

0

我对任务并行库还不太熟悉,但是...通过创建Send一个async方法,您可以开始发送操作,但不要等待它完成。您需要等待Send完成。一种方法是同步运行它:

client.Send(objectOne).RunSynchronously();
client.Send(objectTwo).RunSynchronously();

相反,您也可以在客户端级别执行此操作,如下所示:

// client send
public void Send(object data)
{
    byte[] sendData = SerializationHelper.Serialize(data);
    base.Send(sendData).RunSynchronously();
}
// base send
protected async void Send(byte[] data)
{
    await stream.WriteAsync(data, 0, data.Length);
}
于 2012-10-09T13:25:43.103 回答