C# 判断Task执行结果再执行后续逻辑

news2024/11/14 6:52:06

需求:

有A,B两个任务,A任务比较耗时,但是B任务要等待A任务执行结果再去执行,要求不阻塞主线程;

考虑Task实现。

解决方案一:

首先比较容易想到的方法是:

	public  void GetNumberAsyncUseTask()
	{
		Task.Run(() =>
		{
			Task<bool> task = Task.Run(() =>
			{
				//A任务
				Thread.Sleep(5000);
				return false;
			});

			//B任务
			if (task.Result)
			{
				MessageBox.Show($"task over :{task.Result}");
			}
			else
			{
				MessageBox.Show($"task over :{task.Result}");
			}
		});
	}

开一个线程去按顺序执行,符合要求;

单独尝试Task.Result来等待:

public  void GetNumberAsyncButChokeUp()
{
	Task<bool> task = Task.Run(() =>
	{
		Thread.Sleep(5000);
		return false;
	});
	//会阻塞主线程
	if (task.Result)
	{
		MessageBox.Show($"task over :{task.Result}");
	}


	//同样会阻塞
	//task.Wait();
	//MessageBox.Show($"task over :{task.Result}");
}

发现会造成主界面假死状态,Task.Wait()也会造成主界面假死;

解决方案二:

使用Task.ContinueWith:

	public  void GetNumberContinueWith()
	{
		Task<bool> task = Task.Run(() =>
		{
			Thread.Sleep(5000);
			return false;
		});
		//不会阻塞
		task.ContinueWith((t) =>
		{
			Thread.Sleep(100);
			if (t.Result)
			{
				MessageBox.Show($"task over :{task.Result}");
			}
			else
			{
				MessageBox.Show($"task over :{task.Result}");
			};
		});

解决方案三: 

或者await:

	public async void GetNumberAsync()
	{
		Task<bool> task = Task.Run(() =>
		{
			Thread.Sleep(5000);
			return false;
		});
		//不会阻塞
		await task;
		if (task.Result)
		{
			MessageBox.Show($"task over :{task.Result}");
		}
		else
		{
			MessageBox.Show($"task over :{task.Result}");
		};
	}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入计算机语言之C++:String的模拟实现

&#x1f511;&#x1f511;博客主页&#xff1a;阿客不是客 &#x1f353;&#x1f353;系列专栏&#xff1a;从C语言到C语言的渐深学习 欢迎来到泊舟小课堂 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 一、模拟实现 string 库 1.1 string 的成员变量…

植物大战僵尸杂交版v2.6.1最新版本(附下载链接)

B站游戏作者潜艇伟伟迷于11月3日更新了植物大战僵尸杂交版2.6.1版本&#xff01;&#xff01;&#xff01;&#xff0c;有b站账户的记得要给作者三连关注一下呀&#xff01; 不多废话下载链接放上&#xff1a; 夸克网盘链接&#xff1a;https://pan.quark.cn/s/279e7ed9f878 新…

【Pikachu】目录遍历实战

既然已经决定做一件事&#xff0c;那么除了当初决定做这件事的我之外&#xff0c;没人可以叫我傻瓜。 1.目录遍历漏洞概述 目录遍历漏洞概述 在Web功能的设计过程中&#xff0c;开发者经常会将需要访问的文件作为变量进行定义&#xff0c;以实现前端功能的灵活性。当用户发起…

[ 网络安全介绍 5 ] 为什么要学习网络安全?

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

项目技术栈-解决方案-注册中心

项目技术栈-解决方案-注册中心 Zookeeper、Eureka、Nacos、Consul和Etcd参考文章 服务注册中心&#xff08;Registry&#xff09;&#xff1a;用于保存 RPC Server 的注册信息&#xff0c;当 RPC Server 节点发生变更时&#xff0c;Registry 会同步变更&#xff0c;RPC Client …

除了 Postman,还有什么好用的 API 测试工具吗

尽管 Postman 提供了团队协作的功能&#xff0c;但是免费版本的功能较为基础&#xff0c;付费版的价格对于小型团队或个人开发者来说可能较高。而且访问 Postman 有时会非常慢&#xff0c;太影响体验了。 鉴于上述局限性&#xff0c;Apifox 成为了一个很好的替代选择。Apifox …

WPF学习之路,控件的只读、是否可以、是否可见属性控制

C#的控件学习之控件属性操作 控件的只读、是否可以、是否可见&#xff0c;是三个重要的参数&#xff0c;在很多表单、列表中都有用到&#xff0c;正常表单控制可以在父层主键控制参数是否可以编辑和可见&#xff0c;但是遇到个别字段需要单独控制时&#xff0c;可以在初始化wi…

LabVIEW开发相机与显微镜自动对焦功能

自动对焦是显微成像系统中的关键功能&#xff0c;通常由显微镜的电动调焦模块或特定的镜头系统提供&#xff0c;而工业相机则主要用于高分辨率图像的采集&#xff0c;不具备独立的自动对焦功能。以下是自动对焦的工作原理、实现方式及实际应用案例。 1. 自动对焦的工作原理 &a…

IBM 开源的文档转化利器「GitHub 热点速览」

上周的热门开源项目&#xff0c;Star 数增长犹如坐上了火箭&#xff0c;一飞冲天。短短一周就飙升了 6k Star 的多格式文档解析和导出神器 Docling&#xff0c;支持库和命令行的使用方式。全新的可视化爬虫平台 Maxun&#xff0c;则在刚开源时便轻松斩获了 4k Star。而本地优先…

STM32完全学习——点亮LED灯

一、寄存器描述 首先我们知道STM32对外设的操作&#xff0c;是靠对寄存器的设置来完成的。因此我们想要点亮LED灯&#xff0c;就需要知道端口的控制寄存器&#xff0c;然后给寄存器设置不同的值就可以让端口来输出0或1&#xff0c;首先我这里使用的是GPIOA这个端口的0-8位来做…

【MongoDB】MongoDB的核心-索引原理及索引优化、及查询聚合优化实战案例(超详细)

文章目录 一、数据库查询效率问题引出索引需求二、索引的基本原理及作用&#xff08;一&#xff09;索引的创建及数据组织&#xff08;二&#xff09;不同类型的索引&#xff08;三&#xff09;索引的额外属性 三、索引的优化与查询计划分析&#xff08;一&#xff09;通过prof…

约束(MYSQL)

not null&#xff08;非空&#xff09; unique&#xff08;唯一&#xff09; default&#xff08;默认约束&#xff0c;规定值&#xff09; 主键约束primary key&#xff08;非空且唯一&#xff09; auto_increment&#xff08;自增类型&#xff09; 复合主键 check&#xff08…

如何保证RabbitMQ的可靠性传输

文章目录 producer到broke生产者到交换机&#xff1a;confirm交换机到队列&#xff1a;returns模式队列溢出&#xff1a;可以采用死信等方式①ConfirmCallback接口②ReturnCallback接口 Broke内部Broke到达消费者 producer到broke 发送方确认 生产者到交换机&#xff1a;conf…

数据库参数备份

MySQL #!/bin/bash # 获取当前日期和时间的时间戳 TIMESTAMP$(date "%Y%m%d-%H%M%S")# 0、创建目录 mkdir /tmp/parameter_$TIMESTAMP/# 1、获取所有命名空间 echo "1、获取所有命名空间" NAMESPACES$(kubectl get ns | grep qfusion- | grep -v qfusion-…

拦截器实现http请求访问本地图片

本文来记录下拦截器实现http请求访问本地图片 文章目录 概述代码实现本文小结 概述 如下图&#xff0c;本机(服务器)存储的图片想要在浏览器上通过Url地址访问&#xff1a; 浏览器直接访问 代码实现 烂机器实现文件真实地址和物理地址之间的映射 Slf4j Configuration public cl…

【数据结构】快排之三路划分

目录 一、前言 二、 快排性能的关键点分析 三、 三路划分基本思想 四、 思路分析 五、提醒 六、代码实现 一、前言 继续对快速排序的深入优化进行探讨 二、 快排性能的关键点分析 决定快排性能的关键点是每次单趟排序后&#xff0c;key对数组的分割。 如果每次选key都能…

Web安全之SQL注入---基础

文章目录 SQL注入简介SQL注入基础SQL注入分类SQL注入流程 SQL注入简介 什么是SQL注入&#xff1f; SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理…

iOS 18.1,未公开的新功能

童锦程祖师爷曾说过&#xff1a;“发誓可以&#xff0c;发朋友圈不行。”表面上看是渣男语录&#xff0c;实际上也说明了人们对隐私的看重。 在当今生活中&#xff0c;智能手机可能是最私密的电子产品&#xff0c;没有之一。不管是照片、联系人、短信、APP数据&#xff0c;甚至…

网页版五子棋——对战模块(服务器端开发②)

前一篇文章&#xff1a;网页版五子棋——对战模块&#xff08;服务器端开发①&#xff09;-CSDN博客 项目源代码&#xff1a;Java: 利用Java解题与实现部分功能及小项目的代码集合 - Gitee.com 目录 前言 一、创建并注册 GameAPI 类 1.创建 GameAPI 类 2.注册 GameAPI 类 …

★ C++进阶篇 ★ 异常

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起学习C中的异常 ~ ​❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 C进阶篇专栏&am…