首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[C#][原创]函数执行超时研究

[C#][原创]函数执行超时研究

作者头像
云未归来
发布2025-07-18 13:50:23
发布2025-07-18 13:50:23
1140
举报

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms;   namespace 函数执行超时研究 {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }           private void button2_Click(object sender, EventArgs e)         {             string name = "";             Thread threadToKill = null;             Action wrappedAction = () =>             {                 threadToKill = Thread.CurrentThread;                 name = DoWork1(3);             };               IAsyncResult result = wrappedAction.BeginInvoke(null, null);             if (result.AsyncWaitHandle.WaitOne(3000))             {                 wrappedAction.EndInvoke(result);             }             else             {                 threadToKill.Abort();                 throw new TimeoutException();             }               MessageBox.Show(name);         }           private void button1_Click(object sender, EventArgs e)         {             CallWithTimeout(DoWork,4000);         }         public void DoWork()         {             Thread.Sleep(3000);         }         public string DoWork1(int num)         {             Thread.Sleep(2000);             return "hello";         }            /// <summary>         /// 执行函数超时,Action表示委托,函数没有参数没有返回值         /// </summary>         /// <param name="action"></param>         /// <param name="timeoutMilliseconds"></param>         void CallWithTimeout(Action action, int timeoutMilliseconds)         {             Thread threadToKill = null;             Action wrappedAction = () =>             {                 threadToKill = Thread.CurrentThread;                 action();             };               IAsyncResult result = wrappedAction.BeginInvoke(null, null);             if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds))             {                 wrappedAction.EndInvoke(result);             }             else             {                 threadToKill.Abort();                 throw new TimeoutException();             }         }                       } }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档