posts - 609,  comments - 13,  views - 64万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
k
复制代码
using System.Text.Json;

namespace WinFormsApp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 更新消息框
        /// </summary>
        /// <param name="msg"></param>
        public void UpdateMsg(string msg)
        {
            if (txtMsg.InvokeRequired)
            {
                Action<string> action = UpdateMsg;
                Invoke(action, msg);
                return;
            }
            txtMsg.AppendText(msg + "\r\n");
            //滚动到底部
            txtMsg.ScrollToCaret();
        }

        /// <summary>
        /// 启用、禁用 按钮。
        /// </summary>
        /// <param name="enabled"></param>
        private void SetBtnEnable(bool enabled)
        {
            if (btnStart.InvokeRequired)
            {
                Action<bool> action = SetBtnEnable;
                Invoke(action, enabled);
                return;
            }
            btnStart.Enabled = enabled;
        }

        /// <summary>
        /// 开始执行线程
        /// </summary>
        private async void btnStart_Click(object sender, EventArgs e)
        {
            //开启一个子线程,不然等待时会卡主线程。
            await Task.Run(async () => { await TestIt(); });
        }

        public async Task TestIt()
        {
            //搞个集合
            List<int> list = new List<int>();
            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            //任务集合
            List<Task> tasks = new List<Task>();

            //执行方法体
            Func<int, string> func = (id) =>
            {
                using (var context = new XCGDbContext())
                {
                    var stus = context.Students.Where(x => x.Id == id).FirstOrDefault();
                    if (stus == null)
                    {
                        return "id:" + id + " 无数据";
                    }
                    var str = JsonSerializer.Serialize(stus);
                    return str;
                }
            };

            int maxTaskCount = 3;
            foreach (int i in list)
            {
                int k = i;
                tasks.Add(Task.Run(() =>
                {
                    var res = func(k);
                    UpdateMsg(res);
                }));
                //判断线程数量不能超过最大设定数。
                if (tasks.Count > maxTaskCount)
                {
                    //等待任何一个完成,会卡当前线程。
                    Task.WaitAny(tasks.ToArray());
                    //排除掉已完成的任务
                    tasks = tasks.Where(t => t.Status != TaskStatus.RanToCompletion).ToList();
                }
            }

            TaskFactory taskFac = new TaskFactory();
            //不卡主线程,所有Task完成,才执行下面的操作
            await taskFac.ContinueWhenAll(tasks.ToArray(), arr =>
            {
                //全部完成,执行其他操作...
                UpdateMsg("执行完毕");
            });
        }
    }
}
复制代码

 

posted on   邢帅杰  阅读(123)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2018-05-21 python基础2
2018-05-21 python基础1
2018-05-21 python中的字符数字之间的转换函数
点击右上角即可分享
微信分享提示