当前位置: 首页 > news >正文

外贸网站案例湖北 网站建设

外贸网站案例,湖北 网站建设,外贸求购信息平台,wordpress修改字体插件最近在开发过程中遇到了一个问题,在进行通讯连接时,如果没有连接的话会延时几十秒,而且还设置不了连接超时时间,于是我就想着有没有一种可以判断这个方法的执行时间超过多少秒,就跳出执行其他方法,经过大量…

最近在开发过程中遇到了一个问题,在进行通讯连接时,如果没有连接的话会延时几十秒,而且还设置不了连接超时时间,于是我就想着有没有一种可以判断这个方法的执行时间超过多少秒,就跳出执行其他方法,经过大量搜索,找到了几种方法,基本上都是以循环来判断实现的,也有一种直接设置方法执行时间的,因为我的遇到的问题比较少见,所以用了第三种不常见的方法来实现,大家可以根据自己的需求来选择。

一、异步方法场景(使用 Task 和 CancellationToken)

当处理异步方法时,借助 CancellationToken 来实现超时控制并在超时时执行下一个方法是一种比较常用且规范的做法,示例代码如下:

using System;
using System.Threading;
using System.Threading.Tasks;class Program
{static async Task Main(){// 设置超时时间对应的CancellationTokenSource,这里假设超时时间为3秒,可按需调整CancellationTokenSource cts = new CancellationTokenSource(3000); try{await DoFirstAsync(cts.Token);}catch (OperationCanceledException){Console.WriteLine("第一个方法执行超时,开始执行下一个方法");await DoNextAsync();}Console.ReadLine();}static async Task DoFirstAsync(CancellationToken cancellationToken){// 模拟一个耗时的异步操作,比如网络请求、长时间的文件读取等// 这里使用Task.Delay来模拟耗时操作,实际中替换为真实业务逻辑await Task.Delay(5000, cancellationToken); }static async Task DoNextAsync(){Console.WriteLine("正在执行下一个方法...");// 在这里添加下一个方法具体要做的业务逻辑,比如进行其他的数据处理、发起新的请求等await Task.CompleteTask;}
}

在上述代码中:

  • 设置超时机制:
    首先创建了 CancellationTokenSource 实例,并在构造函数中传入超时时间(以毫秒为单位,这里设置为 3000 毫秒即 3 秒),通过它可以获取 CancellationToken,这个令牌用于在异步操作中传递取消信号。
  • 执行第一个异步方法:
    在 DoFirstAsync 方法中,模拟了一个耗时 5 秒的异步操作(通过 Task.Delay(5000, cancellationToken)),同时传递了 CancellationToken。如果在这个异步操作执行过程中,超时时间到了(也就是 3 秒后),CancellationToken 会触发取消操作,使得 Task.Delay 抛出 OperationCanceledException 异常,进而导致 DoFirstAsync 方法停止执行。
  • 捕获异常并执行下一个方法:
    在 Main 方法中,使用 try-catch 块捕获 OperationCanceledException 异常,一旦捕获到,表示第一个方法执行超时了,此时会输出相应提示信息,并接着执行 DoNextAsync 方法,也就是开始执行下一个方法。

二、同步方法场景(使用 Stopwatch 类)

对于同步方法,可以利用 Stopwatch 类来记录方法执行的时间,通过不断判断是否超时来决定是否结束当前方法执行并转去执行下一个方法,示例如下:


using System;
using System.Diagnostics;class Program
{static void Main(){DoFirst();DoNext();Console.ReadLine();}static void DoFirst(){Stopwatch stopwatch = new Stopwatch();stopwatch.Start();while (true){// 模拟同步方法中的一些操作,这里简单输出内容,实际中替换为真实业务逻辑Console.WriteLine("正在执行第一个方法...");if (stopwatch.Elapsed.TotalSeconds >= 3){Console.WriteLine("第一个方法执行超时,开始执行下一个方法");break;}System.Threading.Thread.Sleep(500);}stopwatch.Stop();}static void DoNext(){Console.WriteLine("正在执行下一个方法...");// 在这里添加下一个方法具体要做的业务逻辑,例如对数据进行处理、计算等操作for (int i = 0; i < 10; i++){Console.WriteLine($"下一个方法中的操作:{i}");}}
}

在这个示例中:

  • 使用 Stopwatch 计时:
    在 DoFirst 方法中,先创建并启动 Stopwatch 实例来记录时间,然后进入一个循环模拟方法的执行过程(这里只是简单地输出一些内容,实际应用中替换为真实的业务逻辑操作)。
  • 判断超时并结束当前方法:
    在每次循环中,通过 stopwatch.Elapsed.TotalSeconds >= 3 判断是否已经超过了设定的超时时间(这里假设为 3 秒,可按需调整),如果超过了,就输出提示信息并通过 break 跳出循环,结束 DoFirst 方法的执行。
  • 执行下一个方法:
    当 DoFirst 方法结束后,就会接着执行 DoNext 方法,也就是执行下一个需要执行的方法,在 DoNext 方法中可以添加具体的业务逻辑操作。

三、基于委托和 BeginInvoke/EndInvoke 的方式(较老但仍可用的异步模式)

在早期的 C# 异步编程中,可以使用委托的 BeginInvoke 和 EndInvoke 方法来实现类似的超时控制及后续操作,不过现在基于任务的异步模式更为常用,以下是示例代码供参考:

using System;
using System.Threading;class Program
{static void Main(){// 创建一个委托,指向要执行的第一个方法Action firstAction = DoFirst;// 开始异步调用第一个方法,并获取IAsyncResult对象用于后续操作IAsyncResult asyncResult = firstAction.BeginInvoke(null, null);// 设置超时时间,这里假设为3秒,单位是毫秒int timeout = 3000;bool completed = asyncResult.AsyncWaitHandle.WaitOne(timeout);if (completed){// 如果在超时时间内完成,获取结果(这里没有返回值所以不需要接收具体结果)firstAction.EndInvoke(asyncResult);}else{Console.WriteLine("第一个方法执行超时,开始执行下一个方法");DoNext();}Console.ReadLine();}static void DoFirst(){// 模拟操作,这里简单输出一些内容,实际替换为真实业务逻辑for (int i = 0; i < 10; i++){Console.WriteLine("正在执行第一个方法..." + i);Thread.Sleep(500);}}static void DoNext(){Console.WriteLine("正在执行下一个方法...");// 在这里添加下一个方法具体要做的业务逻辑,如数据处理等for (int i = 0; i < 5; i++){Console.WriteLine($"下一个方法中的操作:{i}");}}
}

在上述代码中:

  • 委托异步调用:
    首先创建一个 Action 类型的委托,指向要执行的第一个方法 DoFirst,然后通过 BeginInvoke 方法发起异步调用,并获取到 IAsyncResult 对象,这个对象用于后续判断异步操作是否完成等操作。
  • 设置超时判断:
    设定了超时时间(这里为 3000 毫秒即 3 秒),通过 asyncResult.AsyncWaitHandle.WaitOne(timeout) 来等待异步操作完成,这个方法会返回一个 bool 值,如果在超时时间内操作完成则返回 true,否则返回 false。
  • 根据超时情况执行相应操作:
    如果返回 true,表示在超时时间内第一个方法执行完成了,此时通过 EndInvoke 方法来结束异步调用(如果方法有返回值的话可以在这里获取返回值);如果返回 false,说明执行超时了,就会输出提示信息并执行 DoNext 方法,也就是执行下一个方法。
    这些不同的实现方式可以满足不同的编程场景需求,你可以根据实际的代码结构、方法的同步或异步特性等来选择合适的方式来实现方法执行超时后执行下一个方法的功能。

小白路漫漫,让我们一起加油!!!

http://www.yayakq.cn/news/540708/

相关文章:

  • 枣庄网站建设哪家强为什么做网站特效用用插件
  • 如何发布一个网站昆明网站
  • 高级营销型网站建设一套vi设计多少钱
  • 做免费的小说网站可以赚钱吗广州网站建设优化公司哪家好
  • 网站建设与管理期末总结网站没后台怎么修改类容
  • 网页制作成品网站网站建设方案书的内容
  • p2p倒闭 网站开发杰瑞网站建设
  • 网站建设专业培训如何做企业网站内容策划
  • 织梦网站主页地址更改徐州网站排名公司
  • 国外有趣的网站深圳建站网站公司
  • 山东省住房城乡和建设厅网站首页慕课网网站开发背景
  • 电子产品去什么网站做站点wordpress 函数 应用
  • 上海市企业网站建设网站建设注册
  • 杭州的设计网站员工支付做网站的费用分录
  • 网站建设招聘简介网站建设项目管理
  • 厦门网站建设哪家好厦门最好的网站建设网站建设需求分析要做的事
  • 化妆品购物网站建设目的网站转化怎么做
  • 长沙网站设计哪家专业wordpress 音乐盒
  • 专做定制型网站免费宝塔虚拟主机
  • 互联网技术网站做类似美团的网站得多少钱
  • 电商网站建设目标分析的方法企业网站建设主要考虑哪些
  • 东莞建筑建设网站建设宿迁房产网宿迁市区房屋出售
  • gif图片动态素材网站让wordpress文章页面显示分类标签
  • 做网站开发的电话销售话术企业网站源码 thinkphp
  • 怎样做企业手机网站建设做外贸公司网站重不重要
  • 销售口才900句株洲网站关键词优化
  • 南京网站建设网站制作 雷仁网络博兴县建设局官方网站
  • 创建网站的工具山西品牌网站建设
  • 天津市建设厅注册中心网站平面设计接单价格
  • 网站出现 503怎么了网站建设怎么支付款项