Tag: timeout

C#当我准备好程序结束时,如何停止tcpClient.Connect()进程? 它就在那里坐了10秒钟!

这是我的第一个问题之一。 每当我退出程序时,tcpClient.Connect()都会永远关闭。 我尝试了很多东西,但似乎都没有。 看看CreateConnection()线程,如果客户端还没有连接……我关闭程序,它需要永远关闭。 如果已连接,则立即关闭。 我知道这可以通过某种超时技巧来完成,但我尝试了一些,但没有一个工作。 如果可以,请提供代码示例。 另外,C#在读取/写入实际字节时是否有任何好的教程用缓冲区而不是只有masterServer.writeLine()和masterServer.readline()的版本,或者它们都同样有效吗? 如果你看到其他任何东西可以帮助我改善这一点……无论如何,请继续。 我正在努力教自己如何做到这一点,我没有任何帮助,所以如果你看到它,不要让我继续做错事! 多谢你们! using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; namespace RemoteClient { public partial class Form1 : Form { private int MyPort = 56789; private IPAddress myIp = IPAddress.Parse(“210.232.115.79”); […]

什么是HttpClient.Timeout和使用WebRequestHandler超时属性之间的区别?

我可以直接用HttpClient.Timeout设置我的HttpClient对象的超时,但我最近读到了WebRequestHandler类,它是HttpClientHandler的衍生物。 WebRequestHandler具有ReadWriteTimeout属性。 当与HttpClient.Timeout一起使用时,这将如何影响请求的操作?

HttpClient – 发送一批请求

我想迭代一批请求,使用HttpClient类将它们中的每一个发送到外部API。 foreach (var MyRequest in RequestsBatch) { try { HttpClient httpClient = new HttpClient(); httpClient.Timeout = TimeSpan.FromMilliseconds(5); HttpResponseMessage response = await httpClient.PostAsJsonAsync(string.Format(“{0}api/GetResponse”, endpoint), myRequest); JObject resultResponse = await response.Content.ReadAsAsync(); } catch (Exception ex) { continue; } } 这里的上下文是我需要设置一个非常小的超时值,所以如果响应花费的时间超过了那个时间,我们只需得到“任务被取消”exception并继续迭代。 现在,在上面的代码中,注释这两行: HttpResponseMessage response = await httpClient.PostAsJsonAsync(string.Format(“{0}api/GetResponse”, endpoint), myRequest); resultResponse = await response.Content.ReadAsAsync(); 迭代结束得非常快。 取消注释,然后重试。 这需要很多时间。 我想知道使用await调用PostAsJsonAsync / […]

Thread.Sleep(timeout)和ManualResetEvent.Wait(timeout)有什么区别?

Thread.Sleep(timeout)和resetEvent.Wait(timeout)都会导致执行暂停至少timeout毫秒,那么它们之间是否存在差异? 我知道Thread.Sleep导致线程放弃其时间片的剩余部分,因此可能导致睡眠持续时间远远超过要求的时间。 ManualResetEvent对象的Wait(timeout)方法是否具有相同的问题? 编辑 :我知道ManualResetEvent的主要要点是从另一个线程发出信号 – 现在我只关注事件的Wait方法的情况,指定了超时,没有其他调用者设置事件。 我想知道是否比Thread.Sleep更准确地唤醒准时

c#检测tcp断开连接

我有两个简单的应用程序: 等待特定tcp端口以供客户端连接的服务器应用程序。 然后倾听他的意见,发回一些反馈并断开该客户端的连接。 表单应用程序连接到服务器应用程序,然后说出一些内容,然后等待反馈并断开与服务器的连接,然后在表单中显示反馈。 虽然服务器应用程序似乎行为正常(我已经使用Telnet对其进行了测试,并且我看到反馈并且我看到反馈后直接发生了断开连接),但是表单应用程序似乎并没有注意到与服务器的断开连接 。 (即使在服务器断开连接后,TcpClient.Connected仍然保持为真) 我的问题是:为什么TcpClient.Connected保持正确,我怎么知道服务器是否/何时断开连接? 这是我的完整代码: 表格申请: using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Windows.Forms; using System.Threading; namespace Sender { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void sendButton_Click(object sender, EventArgs e) { TcpClient tcpClient = new TcpClient(); tcpClient.Connect(IPAddress.Parse(“127.0.0.1”), 81); responseLabel.Text = “waiting for […]

区分超时与用户取消

HttpClient具有内置超时function(尽管全部是异步的,即超时可以被认为是与http请求function正交,因此可以由通用异步实用程序处理,但除此之外)并且当超时启动时,它将抛出TaskCanceledException (包装在AggregateException )。 TCE包含一个等于CancellationToken.None 。 现在,如果我向HttpClient提供我自己的CancellationToken并使用它取消操作在它完成(或超时)之前,我得到完全相同的TaskCanceledException ,再次使用CancellationToken.None 。 是否还有一种方法, 通过仅查看抛出的exception ,找出超时是否取消了请求,而不必让我自己的CancellationToken可以访问检查exception的代码? PS这可能是一个错误,并且CancellationToken错误地修复了CancellationToken.None吗? 在取消使用自定义CancellationToken的情况下,我希望TaskCanceledException.CancellationToken等于该自定义标记。 编辑为了使问题更加清晰,通过访问原始的CancellationTokenSource ,可以很容易地区分超时和用户取消: origCancellationTokenSource.IsCancellationRequested == true 从exception中获取CancellationToken虽然给出了错误的答案: ((TaskCanceledException)e.InnerException).CancellationToken.IsCancellationRequested == false 这是一个最小的例子 ,由于受欢迎的需求: public void foo() { makeRequest().ContinueWith(task => { try { var result = task.Result; // do something with the result; } catch (Exception e) { TaskCanceledException innerException = e.InnerException as TaskCanceledException; bool […]

GetRequestStream随机抛出Timeoutexception

谷歌搜索了几天后,我真的无法解决所描述的问题。 希望在这里能找到解决方案 我在同一台服务器上调用WCF服务时使用附加代码。 我在调用WebReq.GetRequestStream()中随机获得Timeout错误 当我检查netstat时,我看到连接仍然打开,所以可能有问题,但我不知道如何解决它 //request inicialization HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url); WebReq.Method = “POST”; WebReq.ContentType = “application/json; charset=utf-8”; WebReq.ContentLength = buffer.Length; WebReq.Proxy = null; WebReq.KeepAlive = false; //also tried with true WebReq.AllowWriteStreamBuffering = false; //also tried with true //this produces an error using (Stream PostData = WebReq.GetRequestStream()) { PostData.Write(buffer, 0, buffer.Length); PostData.Close(); } //open and […]

如何更改表适配器的命令超时

我正在使用Visual Studio 2008和C#。 我有一个.xsd文件,它有一个表适配器。 我想更改表适配器的命令超时。 谢谢你的帮助。

超时使用TaskCompletionSource实现的异步方法

我有一个blackbox对象,它暴露了一个异步操作的方法,并在操作完成时触发一个事件。 我已经使用TaskCompletionSource将其包装到Task BlackBoxOperationAysnc()方法中 – 效果很好。 但是,在那个异步包装器中,如果在给定的超时后没有收到事件,我想管理用超时错误完成异步调用。 目前我使用计时器管理它: public Task BlackBoxOperationAysnc() { var tcs = new TaskCompletionSource(); const int timeoutMs = 20000; Timer timer = new Timer(_ => tcs.TrySetResult(OpResult.Timeout), null, timeoutMs, Timeout.Infinite); EventHandler eventHandler = (sender, args) => { … tcs.TrySetResult(OpResult.BlarBlar); } blackBox.EndAsyncOpEvent += eventHandler; blackBox.StartAsyncOp(); return tcs.Task; } 这是管理超时的唯一方法吗? 有没有设置我自己的计时器 – 我看不到TaskCompletionSource内置的任何超时?

在.NET 4中实现RegEx超时

平台:Silverlight 4,.NET 4 使用.NET 4.5 Developer预览版, RegEx类已得到增强,允许设置Timeout值,如果模式匹配存在问题,将阻止RegEx引擎挂起UI。 请求在.NET 4 Silverlight应用程序中实现类似function的建议。 提前致谢。