1

我在使用 SslStream.WriteAsync 时遇到了一个恼人的问题

这是代码

public void Send(PacketWriter writer)
{
    var buffer = writer.GetWorkspace();

    _sslStream.WriteAsync(buffer, 0, buffer.Length);
}

当以极高的速度写入数据时,它告诉我

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

[注意]:我的意思是高速这样的东西

for (var i = 0 ; i <= 1000; i++)
{
    Send(somedata);
}
4

2 回答 2

1

您必须等到前一个异步写入完成。

更改您的发送方法以返回Task

public Task Send(PacketWriter writer)
{
    var buffer = writer.GetWorkspace();
    return _sslStream.WriteAsync(buffer, 0, buffer.Length);
}

调用方法async,然后等待直到每个发送操作完成:

for (var i = 0 ; i <= 1000; i++)
{
    await Send(somedata);
}
于 2012-10-14T23:00:11.820 回答
0

可以试试这个-

 private static void send_data(SslStream socket_stream, byte[] data)
        {
          Task task = new Task(() => { socket_stream.Write(data, 0, data.Length); });
          task.RunSynchronously();
          task.Wait();
        }

这将确保所有消息都以正常的方式发送,没有任何例外

于 2019-03-10T09:29:09.783 回答