c# - StreamWriter 变量声明延迟
问题描述
在我的 C# 应用程序中,我有一个 while 循环,它从 Redis 消息队列中收集一个字符串并将其发送到侦听服务器。在每个 cicle 中,使用 HttpWebRequest Post 方法打开连接,并使用 StreamWriter 变量发送数据。问题是:在发送两个字符串后,应用程序冻结而没有返回任何错误,它可能一分钟内什么也没做,之后它再次正常工作并继续为另外几个字符串工作,冻结等等。调试显示在 StreamWriter 变量的声明期间发生延迟。
这是代码的核心:
// configure Redis
var redis = new RedisClient("127.0.0.1");
while (true)
{
// read from Redis queue
string json = redis.BRPop(30, "sensors_data");
//...
//URL DECLARATION
//...
try
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentLength = json.Length;
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Proxy = null;
SendDataAsync(json, url);
}
}
static async Task SendDataAsync(string json, string url)
{
try
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentLength = json.Length;
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Proxy = null;
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
try
{
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
Console.Write("Data Sent");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
catch (Exception err)
{
Console.Write(err.Message);
}
Console.WriteLine();
}
所以代码实际上可以工作,只是在声明 StreamWriter 时存在一些奇怪的巨大延迟。有人有什么主意吗?我不知道如何处理这个问题。
编辑
while (true)
{
i = 0;
// read from Redis queue
string json = redis.BRPop(30, "sensors_data");
try
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentLength = json.Length;
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Proxy = null;
using (StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
try
{
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
var response = httpWebRequest.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string reply=reader.ReadToEnd();
Console.WriteLine(reply);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
catch (Exception err)
{
Console.Write(err.Message);
}
Console.WriteLine();
}
解决方案
找到解决方案:显然有必要从服务器获得答案,在我添加了httpWebRequest.GetResponse()
以下两行之后,我不再发现延迟了。
建议:最好使用WebClient,第一次尝试并没有给我任何问题。
推荐阅读
- azure - 如何在 Azure 的不同位置使用公共 IP 地址和 VM?
- html - 在电子邮件中嵌入 Youtube 视频
- mysql - 建立数据库连接 WordPress 时出错(AWS Linux2、MariaDB、Apache)
- python - 使用 python 应用程序将数据发送到 azure 事件中心
- scala - 使用 gRPC 访问 Gatling feeder 中的变量
- android - 安卓远程调试firefox
- amazon-web-services - 在网站中的多个 AWS 账户(在不同的组织中)之间轻松切换
- sql-server - 为什么临时表不是表表达式?
- user-interface - 如何在颤动应用程序中隐藏单击按钮?
- javascript - React js控制componentDidUpdate()方法