首页 > 编程语言 >c#使用委托执行带有超时检查的方法

c#使用委托执行带有超时检查的方法

时间:2023-10-30 14:36:38浏览次数:37  
标签:Execute 委托 c# static result Test 超时 方法

namespace TimeOutHelper
{
internal class Program
    {
// 定义一个泛型委托,用于定义带有超时检查的方法的签名
public delegate TR TimeOutDelegate<in T, out TR>(T param);
private static void Main()
        {
            Dictionary<Guid, string> result;
// 调用TimeoutFunction类的Execute方法执行带有超时检查的方法
// Test方法是一个示例方法,它接受一个字符串参数,并返回一个字典
// "Hello, World!"是传递给Test方法的参数
// result是用于接收Test方法的返回值的字典
// TimeSpan.FromSeconds(3)表示超时时间为3秒
// Execute方法返回一个布尔值,表示是否超时
            Console.WriteLine(TimeoutFunction.Execute(Test, "Hello, World!", out result, TimeSpan.FromSeconds(3)));
            Console.WriteLine("Hello, World!");
            Console.ReadKey();
        }
// 示例方法,接受一个字符串参数,并返回一个字典
public static Dictionary<Guid, string> Test(string sourceString)
        {
// 将字符串转换为字典,每个字符作为键,使用Guid作为值
var result = sourceString.ToDictionary(
                character => Guid.NewGuid(),
                character => character.ToString(CultureInfo.InvariantCulture));
// 模拟耗时操作,暂停4秒
            Thread.Sleep(4000);
return result;
        }
public static class TimeoutFunction
        {
/// <summary>
/// 执行带有超时检查的方法
/// </summary>
/// <typeparam name="T">目标方法的参数类型</typeparam>
/// <typeparam name="TR">执行结果的类型</typeparam>
/// <param name="timeoutMethod">目标方法</param>
/// <param name="param">目标方法的参数</param>
/// <param name="result">执行结果</param>
/// <param name="timeout">超时时间</param>
/// <returns>是否超时</returns>
public static Boolean Execute<T, TR>(
                TimeOutDelegate<T, TR> timeoutMethod, T param, out TR result, TimeSpan timeout)
            {
// 使用异步方式执行目标方法
var asyncResult = timeoutMethod.BeginInvoke(param, null, null);
// 等待指定的超时时间
if (!asyncResult.AsyncWaitHandle.WaitOne(timeout, false))
                {
// 如果超时,则将结果设置为默认值,并返回true
                    result = default(TR);
return true;
                }
// 如果未超时,则获取执行结果,并返回false
                result = timeoutMethod.EndInvoke(asyncResult);
return false;
            }
        }
    }
}

标签:Execute,委托,c#,static,result,Test,超时,方法
From: https://blog.51cto.com/u_12828212/8088663

相关文章

  • Centos8进入单用户模式重置密码方法
    开机出现grubbootloader开机选项菜单时,立即点击键盘任意鍵,bootloader会暂停。按下e,编辑选项菜单,移动上下鍵至linux16核心命令行:加入rd.break。linux16/vmlinuz-3.10.0-123.el7.x86_64root=UUID=449d53d1-84c2-40c0-b05e-d1900591d71brord.lvm.lv=vg_kvm7usb/swapcra......
  • 数据结构与算法 | 二分搜索(Binary Search)
    二分搜索(BinarySearch)文承上篇,搜索算法中除了深度优先搜索(DFS)和广度优先搜索(BFS),二分搜索(BinarySearch)也是最基础搜索算法之一。二分搜索也被称为折半搜索(Half-intervalSearch)也有说法为对数搜索算法(LogarithmicSearch),用于在已排序的数据集中查找特定元素。搜索过程从排序数......
  • JavaScript 中的单例模式
    单例模式是JavaScript中最流行的设计模式之一。单例模式的优点全球访问点:提供对实例的单点访问,可以轻松管理全球资源。内存效率:该模式确保只有一个实例,这特别节省内存。延迟初始化:仅在需要时才创建实例,从而提高性能这是一种创建模式,可确保类只有一个实例,同时提供对该实例......
  • BOSHIDA DC电源模块如何承受超负荷电流的能力
    BOSHIDADC电源模块如何承受超负荷电流的能力DC电源模块是现代电子设备中必不可少的部件,它们通常被用来将交流电转换为稳定的直流电,为电子设备提供所需的电力。在某些情况下,DC电源模块可能会遇到超负荷电流的情况,如启动过程中或异常负载等。因此,DC电源模块必须具备承受超负荷电流......
  • 无涯教程-C语言 - 运算符
     C语言包含丰富的内置运算符,并提供以下类型的运算符-算术运算符关系运算符逻辑运算符按位运算符赋值运算符Misc运算符算术运算符下表显示了C语言支持的所有算术运算符。假设变量A=10,变量B=20,然后-运算符描述示例+相加A+B=30-相减A-B=-10*相乘A*B=20......
  • 【案例分享】H3C交换机堆叠配置
    简介本案例介绍两台成员设备的IRF的配置方法组网需求DeviceA为公司的核心设备,但由于公司网络规模日益增大,DeviceA单台设备的转发能力已无法达到公司网络的需求。为了拓展核心设备的转发能力,又尽量不改变现有网络。现公司希望增加DeviceB,与DeviceA组成IRF,来满足当前网络的需求。......
  • DC电源模块如何承受超负荷电流的能力
    BOSHIDADC电源模块如何承受超负荷电流的能力DC电源模块是现代电子设备中必不可少的部件,它们通常被用来将交流电转换为稳定的直流电,为电子设备提供所需的电力。在某些情况下,DC电源模块可能会遇到超负荷电流的情况,如启动过程中或异常负载等。因此,DC电源模块必须具备承受超负荷电流......
  • 神策数据丨穿越壁垒:CJO 应用指南
    在当今飞速发展的商业环境中,提供卓越的客户体验已经不再是一个简单目标,而是企业可持续增长的必要条件。因此,越来越多来自不同行业的企业开始采用客户旅程编排(CustomerJourneyOrchestration,简称CJO),以增强客户交互并建立持久的关系。但是,大多数企业对于CJO的认知和应用仍处于相......
  • 视频直播app源码,CSS div水平垂直居中和div置于底部
    视频直播app源码,CSSdiv水平垂直居中和div置于底部一、水平居中 .hor_center{  margin:0auto;}​二、水平垂直居中 .content{  width:360px;  height:240px;} .ver_hor_center{  position:absolute;  top:50%;  left:50%;  margi......
  • centos 7 + JDK 1.8.0_381+jenkins-2.346.3-1.1环境搭建与安装
    一.查询JDK版本与Jenkins版本对应关系:https://pkg.jenkins.io/redhat-stable/二.centos7安装JDK1.8版本略三.下载并安装jenkinswgethttps://repo.huaweicloud.com/jenkins/redhat-stable/jenkins-2.346.3-1.1.noarch.rpmrpm-ivhjenkins-2.346.3-1.1.noarch.rpm四.......