首页 > 编程语言 >C# Task若干问题浅析

C# Task若干问题浅析

时间:2024-09-29 18:02:52浏览次数:6  
标签:Task name wordUtils C# OnCompleted ts 执行 浅析

场景:

分析数据库的表结构,并将表结构导出到word中。

方案1.直接用UI线程做,由于会造成UI卡顿,忽略。

方案2.用task:

Task ts = Task.Run(() =>
{
    for (int i = 0; i < listTables.Count; i++)
    {
        string name = listTables[i].Name;

        List<SqlserverTableStruct> list = form4DAL.GetTableStruct(name);

        this.Invoke(s, $"{i + 1}/{total}");

        wordUtils.CreateWord(name, list);
    }
});
ts.GetAwaiter().OnCompleted(() =>
{
    wordUtils.SaveFile("c:\\", filename + ".docx");
    this.Invoke(s1, "生成完毕!");
});

方案3:与方案2类似,但最后部分使用:

 ts.ContinueWith(t => {
     wordUtils.SaveFile("c:\\", filename + ".docx");
     this.Invoke(s1, "生成完毕!");
 });

代码分析:

方案2和方案3的类似的,但问题的关键在于用:OnCompleted和ContinueWith哪个更优?而为了回答这个问题,自己也进行了一些实验,最终发现了一些有意思的现象:

1.在.net framework框架下:OnCompleted和ContinueWith会随机出现其中一个先执行,而另一个后执行的情况。

2.在.net 8.0的环境下,始终是continuewith先执行,而complete后执行。

结论:

在新的框架下,这2个的逻辑是:task1执行后,然后判断是否有continue task,如果有则执行,如果没有则执行complete。而在老的.net framework框架下,感觉行为有所不同,甚至出现交替优先执行的情况。鉴于此,感觉在老的框架下,尽量避免两者同时使用(或许是bug).

标签:Task,name,wordUtils,C#,OnCompleted,ts,执行,浅析
From: https://www.cnblogs.com/jizhong/p/18440514

相关文章

  • 基于C++11的数据库连接池环境配置
    欢迎访问我的另一个博客:https://xingzhu.top/ubuntu安装python2由于接下来要使用python,所以先安装python#安装python2.7.18即可#python3不行,版本过高,会报错sudoaptinstallpython2python2--version安装完成后我们可以使用如下命令来检查目前可用的Pyt......
  • C++的并发编程历史
    多线程环境并非所有的语言都提供了多线程的环境。即便是C++语言,直到C++11标准之前,也是没有多线程支持的。在这种情况下,Linux/Unix平台下的开发者通常会使用POSIXThreads,Windows上的开发者也会有相应的接口。但很明显,这些API都只针对特定的操作系统平台,可移植性较差。如果要同......
  • 《最终幻想16》游戏启动时崩溃弹窗“找不到api-ms-win-core-com-l1-1-0.dll”文件该怎
    当启动《最终幻想16》时,游戏崩溃并弹窗显示“找不到api-ms-win-core-com-l1-1-0.dll”文件,这严重影响了游戏体验。现在为您细致剖析修复此问题的具体方法,助您顺利解决,畅玩游戏。本篇将为大家带来《最终幻想16》游戏启动时崩溃弹窗“找不到api-ms-win-core-com-l1-1-0.dll”文件......
  • 《地狱之刃2:塞娜的史诗》游戏启动时崩溃黑屏弹窗“找不到api-ms-win-core-console-l1-
    在启动《地狱之刃2:塞娜的史诗》时,崩溃黑屏并弹窗显示“找不到api-ms-win-core-console-l1-2-0.dll”文件,这十分棘手。此问题的解决可能需要特定操作。现在为您详细讲解解决办法,助您摆脱这一困境。本篇将为大家带来《地狱之刃2:塞娜的史诗》游戏启动时崩溃黑屏弹窗“找不到api-ms......
  • HarmonyOs DevEco Studio小技巧24--异步编程(Promises、async/await)
    异步编程:调用后耗时,不阻塞代码继续执行,将来完成后,触发回调函数传递结果异步编程的范畴:网络请求(如使用 fetch 或 XMLHttpRequest 发送HTTP请求获取数据)。文件读写操作(读取或写入本地文件)。数据库操作(查询、插入、更新、删除数据)。定时器函数(如 setTimeout 和 setInt......
  • 中东电商:下一个蓝海,Google Cloud和Google Maps助力企业乘风破浪
    随着“一带一路”倡议的深入推进,中东地区已成为全球瞩目的新兴市场。庞大的年轻消费群体、丰富的石油资源以及不断完善的数字基础设施,为中国企业提供了前所未有的发展机遇。中东电商市场,无疑是下一个蓝海!中东电商市场:数字与机遇庞大市场规模:2023年中东地区的电商市场规模......
  • Jsoncpp
    欢迎访问我的另一个博客:https://xingzhu.top/Json概述:https://xingzhu.top/archives/json-gai-shuC++中原生不支持Json,所以需要导入Jsoncpp库准备环境下载Jsoncpp从github上下载源码#这是链接地址https://github.com/open-source-parsers/jsoncpp这里我使......
  • 接上文实现SpringSecurity,拦截器的实现
    实现拦截器有图片可知,在上篇文章我们重写了UserDetailsManager,现在我们来进行之后的操作在UserDetailsManager中我们可以调动数据库去进行一个账号密码的校验之后我们这样设置拦截器进行一个token获取存储在usernamePasswordAuthenticationFilter这一层中,有,则存储在Secur......
  • 【JavaEE】——CAS指令和ABA问题
    阿华代码,不是逆风,就是我疯你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你!!目录一:CAS指令1:概念2:伪代码例子说明3:优点二:原子类1:引入2:代码示例3:与volatile的区别4:标准库源码三:CAS是如何避免线程安全问题四:CAS中ABA问题1:引入2:极端情况3:解决方案......
  • error: index-pack died of signal 15
    使用Jenkins从gitlab拉取代码构建时,遇到报错error:index-packdiedofsignal15一个常见的原因是仓库过大或网络不佳引起的超时,以下配置可解决。配置工程,为源码管理部分增加AdditionalBehaviours,选择“高级的克隆行为”,把克隆和拉取操作的超时时间(分钟)设置为一个较长的时间,......