C# async await 异步执行方法封装 替代 BackgroundWorker
BackWork代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Utils
{
public class BackWork
{
public static void RunAsync(Action action, Action complete = null, Action<Exception> errorAction = null)
{
RunAsync((obj) => action(), null, complete, errorAction);
} public static async void RunAsync(Action<object> action, object arg = null, Action complete = null, Action<Exception> errorAction = null)
{
Exception exception = null; Task task = Task.Run(() =>
{
try
{
action(arg);
}
catch (Exception ex)
{
exception = ex;
}
});
await task; if (exception == null)
{
if (complete != null)
{
try
{
complete();
}
catch (Exception ex)
{
if (errorAction != null)
{
errorAction(ex);
}
}
}
}
else
{
if (errorAction != null)
{
errorAction(exception);
}
}
}
}
}
测试代码:
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = string.Empty;
textBox1.AppendText("开始\r\n"); for (int i = 0; i < 10; i++)
{
string str = string.Empty;
int k = 0; BackWork.RunAsync((obj) =>
{
str = "i=" + obj + "\r\n";
k = (int)obj;
}, i, () =>
{
textBox1.AppendText(str); BackWork.RunAsync(() =>
{
str = "i=" + i + ", k=" + k + "\r\n";
}, () =>
{
textBox1.AppendText(str);
}, (ex) =>
{
textBox1.AppendText("错误:" + ex.Message + "\r\n");
}); }, (ex) =>
{
textBox1.AppendText("错误:" + ex.Message + "\r\n");
});
}
}
测试截图:

C# async await 异步执行方法封装 替代 BackgroundWorker的更多相关文章
- async await 的执行
async await的执行 注意:本次代码仅在 Chrome 73 下进行测试. start 不了解 async await 的,先去看阮一峰老师的文章async 函数. 先来看一道头条的面试题,这 ...
- 【转】C# Async/Await 异步编程中的最佳做法
Async/Await 异步编程中的最佳做法 Stephen Cleary 近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支 ...
- 将 async/await 异步代码转换为安全的不会死锁的同步代码
在 async/await 异步模型(即 TAP Task-based Asynchronous Pattern)出现以前,有大量的同步代码存在于代码库中,以至于这些代码全部迁移到 async/awa ...
- [译]C# 7系列,Part 2: Async Main 异步Main方法
原文:https://blogs.msdn.microsoft.com/mazhou/2017/05/30/c-7-series-part-2-async-main/ 你大概知道,C#语言可以构建两种 ...
- .NET Web应用中为什么要使用async/await异步编程
前言 什么是async/await? await和async是.NET Framework4.5框架.C#5.0语法里面出现的技术,目的是用于简化异步编程模型. async和await的关系? asy ...
- C#中 Thread,Task,Async/Await 异步编程
什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调 ...
- 理解 async/await 的执行
这是一篇简单的短文章,方便理解. 开局先丢官宣:sec-async-function-definitions 这个链接是对 await 的解释,解释了它的执行. await 的执行意味着(官宣巴拉巴拉 ...
- node.js async/await 继发执行与并发执行
async/await 继发执行与并发执行,看如何控制 两个异步函数 foo bar function foo() { return new Promise((resolve, reject) =&g ...
- Spring Boot 之异步执行方法
前言: 最近的时候遇到一个需求,就是当服务器接到请求并不需要任务执行完成才返回结果,可以立即返回结果,让任务异步的去执行.开始考虑是直接启一个新的线程去执行任务或者把任务提交到一个线程池去执行,这两种 ...
- async/await异步处理demo
async/await异步处理demo 下载地址: async/await异步处理demo
随机推荐
- DP:打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个代表每 ...
- jmeter编写java脚本
jmeter开发java脚本主要的依赖包有三个如下图 步骤1 :打开idea,创建一个project,导入上图依赖包 步骤2:创建一个类,继承AbstractJavaSamplerClient类,并实 ...
- 如何在Web应用中添加一个JavaScript Excel查看器
前言 在现代的Web应用开发中,Excel文件的处理和展示是一项常见的需求.为了提供更好的用户体验和功能,经常需要在Web应用中添加一个JavaScript Excel查看器,小编今天将为大家展示如何 ...
- 关于C#反射概念,附带案例!
反射 C#中的反射是一种使程序在运行时能够动态地获取类型信息并调用其成员的技术.通过反射,程序可以在运行时进行类型的动态加载.创建对象.调用方法和属性,以及访问和修改字段等.反射可以使程序更加灵活,但 ...
- 解决URLEncoder.encode 编码空格变 + 号
jdk自带的URL编码工具类 URLEncoder 在对字符串进行URI编码的时候,会把空格编码为 + 号. 空格的URI编码其实是:%20 解决办法:对编码后的字符串,进行 + 号替换为 %20.总 ...
- Go 语言为什么很少使用数组?
大家好,我是 frank,「Golang 语言开发栈」公众号作者. 01 介绍 在 Go 语言中,数组是一块连续的内存,数组不可以扩容,数组在作为参数传递时,属于值传递. 数组的长度和类型共同决定数组 ...
- 摆脱自研难题,AUI Kit助力企业快速搭建专属互动课堂
本专栏将分享阿里云视频云MediaBox系列技术文章,深度剖析音视频开发利器的技术架构.技术性能.开发能效和最佳实践,一起开启音视频的开发之旅.本文为MediaBox最佳实践篇,重点从互动课堂AUI ...
- SQL注入Fuzzing字典
需要的自取 ' " # - -- ' -- --'; ' ; = ' = ; = -- \x23 \x27 \x3D \x3B' \x3D \x27 \x27\x4F\x52 SELECT ...
- export详解
linux下export命令详解 export:将自定义变量设定为系统环境变量(当前shell中有效) 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] ...
- HTML5 Video 控件如何使用?
HTML5 提供了 <video> 元素,用于在网页上嵌入和播放视频.以下是如何使用HTML5 <video> 控件的基本步骤: 添加<video>元素: 在HTM ...