You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现带5秒输入超时限制的C#矩阵创建函数

带超时的控制台矩阵生成函数实现

原函数通过控制台输入多行整数生成矩阵,循环逻辑为输入行的列数与第一行相同时持续输入。现在需要修改为:当控制台超过5秒未输入内容时,终止循环并返回已创建的矩阵。

修改后的完整代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

public static class MatrixHelper
{
    public static async Task<List<List<int>>> CreateMatrixWithTimeout()
    {
        List<List<int>> matrix = new List<List<int>>();
        const int timeoutMilliseconds = 5000; // 5秒超时阈值

        while (true)
        {
            // 同时监听输入完成事件与超时事件
            var inputTask = Console.In.ReadLineAsync();
            var timeoutTask = Task.Delay(timeoutMilliseconds);
            var completedTask = await Task.WhenAny(inputTask, timeoutTask);

            if (completedTask == timeoutTask)
            {
                // 触发超时,终止循环
                break;
            }

            string inputLine = await inputTask;
            if (string.IsNullOrWhiteSpace(inputLine))
            {
                // 空输入直接终止(可根据需求调整逻辑)
                break;
            }

            // 解析输入行的整数列表
            List<int> row = Array.ConvertAll(
                inputLine.Split(" ", StringSplitOptions.RemoveEmptyEntries),
                s => int.TryParse(s, out int num) ? num : 0 // 简单处理无效输入,可按需修改
            ).ToList();

            matrix.Add(row);

            // 第一行输入完成后,校验后续行列数是否与第一行一致
            if (matrix.Count > 1 && matrix[0].Count != row.Count)
            {
                break;
            }
        }

        return matrix;
    }

    // 同步调用包装方法(适配原有同步调用场景)
    public static List<List<int>> CreateMatrixWithTimeoutSync()
    {
        return CreateMatrixWithTimeout().GetAwaiter().GetResult();
    }
}

核心改动说明

  • 超时逻辑实现:通过Task.WhenAny同时等待异步输入任务和5秒延迟任务,优先响应先完成的事件,超时直接终止循环。
  • 异步输入适配:替换阻塞式的Console.ReadLine()为异步的Console.In.ReadLineAsync(),确保超时判断不会被输入阻塞。
  • 原有逻辑保留:维持了"后续行列数需与第一行一致才继续输入"的校验规则,仅新增超时终止的退出条件。
  • 输入容错处理:添加了无效输入的简单兼容(无法解析的字符串转为0),可根据实际需求改为抛出异常或跳过该行。

使用示例

// 异步调用方式
var matrix = await MatrixHelper.CreateMatrixWithTimeout();

// 同步调用方式(适配原有代码调用习惯)
var matrixSync = MatrixHelper.CreateMatrixWithTimeoutSync();

内容的提问来源于stack exchange,提问作者Dominik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:50:29