Webからデータを読み取る関数(以下のコードを参照)があります。この関数の問題は、高速で戻る場合もあれば、無期限に待機する場合もあることです。スレッドは、一定期間待ってから戻るのに役立つと聞きました。
スレッドを「x」秒間待機させ、アクティビティが記録されていない場合に戻る方法を教えてください。私の関数も結果として文字列を返します。スレッドを使用しているときにその値をキャッチすることは可能ですか?
private string ReadMessage(SslStream sslStream)
{
// Read the message sent by the server.
// The end of the message is signaled using the
// "<EOF>" marker.
byte[] buffer = new byte[2048];
StringBuilder messageData = new StringBuilder();
int bytes = -1;
try
{
bytes = sslStream.Read(buffer, 0, buffer.Length);
// Use Decoder class to convert from bytes to UTF8
// in case a character spans two buffers.
Decoder decoder = Encoding.ASCII.GetDecoder();
char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)];
decoder.GetChars(buffer, 0, bytes, chars, 0);
messageData.Append(chars);
// Check for EOF.
}
catch (Exception ex)
{
throw;
}
return messageData.ToString();
}
アンドレ・カリルのコメント:
私の必要性は、SSLサーバーに何らかの値を読み書きすることです。サーバーは書き込み操作ごとに何らかの応答を送信します。ReadMessageは着信メッセージの読み取りを担当します。ReadMessage(sslStream.Read(buffer、0、buffer.Length);)が永久に待機する状況を見つけました。この問題に対処するために、「x」秒待ってから戻ることができるスレッドを検討しました。次のコードは、ReadMEssageの動作を示しています
byte[] messsage = Encoding.UTF8.GetBytes(inputmsg);
// Send hello message to the server.
sslStream.Write(messsage);
sslStream.Flush();
// Read message from the server.
outputmsg = ReadMessage(sslStream);
// Console.WriteLine("Server says: {0}", serverMessage);
// Close the client connection.
client.Close();