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。これを行う 1 つの方法は、同期的に実行することです。

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 に答える