我有一个从网上读取一些数据的函数(请参见下面的代码)。这个函数的问题是有时它会很快返回,但有时它会无限期地等待。我听说线程可以帮助我等待一段确定的时间并返回。
你能告诉我如何让一个线程等待'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();