在 C# 中人为地创建连接超时错误?

Artificially create a connection timeout error in C#?

我想在我的应用程序中调用外部 Api,在调用 Api 之后,如果超时异常抛出,那么我的应用程序 returns 结果。现在我想模拟这种情况。 这是我的代码:

 public string Sample()
    {
        try
        {
            using (HttpClient client = new HttpClient())
            {
                HttpResponseMessage response =
                    client.GetAsync("ExternalApi").GetAwaiter().GetResult();
                //...
            }
        }
        catch (Exception e)
        {
            return ((HttpRequestException) e).StatusCode == HttpStatusCode.RequestTimeout ? "timeOut" : "Error";
        }

        return "Success";
    }

如果我在 ExternalApi 中抛出 TimeoutException,那么在 Sample 方法中我会得到内部服务器错误。 如何创建人为超时异常?

我最近使用 Task 方法替代了 Tracert,以便在出现问题时发送 DNS 信息请求时获得异常。我猜你应该使用 Task<>。看看主要的 MSDN 解释:

https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task?view=net-5.0

另外,我认为您会欣赏我如何在自己的代码中检查成功或异常。查看布尔 DNS 检查中的代码:

An alternative class for Tracert with DNS feature

HttpClient class 有一个 Timeout 属性。

所以试试这个。

using (HttpClient client 
     = new HttpClient(){Timeout=new TimeSpan(0,5,0)})

暂停五分钟。

如果超时到期,您将收到 WebException。

为此,我终于使用了一个名为 'Hercules Setup Utility' 的应用程序。此应用程序侦听 'Tcp Server' 中的 端口 并收到您的请求但根本不响应。执行此应用程序并监听端口后,您必须在应用程序中设置类似 localhost:port 的内容。你会得到一个超时异常。

HttpClient class 具有超时属性。或者您可以使用一些应用程序来创建超时,例如 Hercules Setup Utility