私は、待機しているときにwriteAsyncを待つようにネットワークストリームに信号を送る方法を試していました。以下のように、stream.readasyncメソッドから戻るメカニズムが不明でした。私は、ストリームへの書き込みを可能にする完了するタスクを通知する方法を思いついた。このコードは、そのアプローチで間違っているようです。より良いアプローチがあるでしょうか?ネットワークストリーム信号がデータを送信するのを待っています
async Task SocketStuff(TcpListener listener)
{
TcpClient client = await listener.AcceptTcpClientAsync();
NetworkStream stream = client.GetStream();
var buf = new byte[2048];
var readTask = stream.ReadAsync(buf, 0, buf.Length);
var signalToSend = SignalReadyToSendAsync();
var completetedTask = await Task.WhenAny(readTask, signalToSend);
if (completetedTask == signalToSend)
{
await stream.WriteAsync(someData, 0, someData.Length);
}
if (completetedTask == readTask)
{
// .....
}
}
async Task SignalReadyToSendAsync()
{
while (nothingToSend)
{
await Task.Delay(250);
}
return;
データが利用可能であることがわかったコードから直接データを送信するだけではどうですか?送信と受信を同時に行うことができます。 –