c# 调用接口,避免接口内部卡死,实现超时退出 3.0

csharp 复制代码
using System;
using System.Threading;

public class Program
{
    public static void Main()
    {
        // 创建一个新的线程来调用接口
        Thread thread = new Thread(CallCInterface);
        thread.Start();

        // 等待一段时间,如果超时则中断线程
        bool timeout = !thread.Join(TimeSpan.FromSeconds(5)); // 设置超时时间为5秒
        if (timeout)
        {
            thread.Abort(); // 中断线程
            Console.WriteLine("C interface call timed out.");
        }
        else
        {
            Console.WriteLine("C interface call completed successfully.");
        }
        Console.ReadKey();
    }

    public static void CallCInterface()
    {
        int i = 0;

        while(true)
        {
            Console.WriteLine(i++);
            Thread.Sleep(1000);
        }
    }
}

虽然使用Thread类和Join方法设置连接超时时间,但是在连接超时时直接中止线程并抛出异常是不安全的,并且未正确处理连接超时的情况。建议使用异步方法和Task来处理连接超时

csharp 复制代码
                 _client = new TcpClient();
                var connectTask = _client.ConnectAsync(_ip, _port);
                var timeout = Task.Delay(_connectTimeout);

                await Task.WhenAny(connectTask, timeout);

                if (!connectTask.IsCompleted)
                {
                    throw new TimeoutException("连接超时");
                }

添加一个CancellationToken参数,以便能够在需要时取消异步操作。

csharp 复制代码
                    using (var cts = new CancellationTokenSource())
                    {
                        cts.CancelAfter(_connectTimeout);

                        var connectTask = _client.ConnectAsync(_ip, _port);
                        var timeout = Task.Delay(_connectTimeout, cts.Token);

                        await Task.WhenAny(connectTask, timeout);

                        if (!connectTask.IsCompleted)
                        {
                            throw new TimeoutException("连接超时");
                        }
                    }
相关推荐
沐知全栈开发17 分钟前
JavaScript 条件语句
开发语言
RSTJ_162519 分钟前
PYTHON+AI LLM DAY THREETY-SEVEN
开发语言·人工智能·python
清水白石00837 分钟前
《Python性能深潜:从对象分配开销到“小对象风暴”的破解之道(含实战与最佳实践)》
开发语言·python
Je1lyfish1 小时前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
Brilliantwxx1 小时前
【C++】 vector(代码实现+坑点讲解)
开发语言·c++·笔记·算法
野生技术架构师1 小时前
2026年最全Java面试题及答案汇总(建议收藏,面试前看这篇就够了)
java·开发语言·面试
百锦再2 小时前
Auto.js变成基础知识学习
开发语言·javascript·学习·sqlite·kotlin·android studio·数据库开发
叼烟扛炮2 小时前
C++第三讲:类和对象(中)
开发语言·c++·类和对象
iDao技术魔方3 小时前
DeepSeek TUI:原生 Rust 打造的终端 AI 编码 Agent
开发语言·人工智能·rust
jghhh013 小时前
认知无线电中基于能量检测的双门限频谱感知的 MATLAB 仿真
开发语言·matlab