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
随机推荐
- 6k Star!B站、滴滴、小红书都在用的网站防火墙
你有网站么?你担心网站被黑客攻击么?你知道如何抵御来自黑客的攻击吗? 据称互联网上有 30% 的流量都来自于恶意攻击.做过 Web 开发或者有过建站经验的朋友对 SQL 注入.CC 攻击.XSS.We ...
- 如何用MySQL快速导入sql数据?
在 MySQL 中,可以使用多种方法来快速导入 SQL 数据.以下是一些常用的方法和技巧,以帮助你在 MySQL 中快速导入大量的 SQL 数据. 1. 使用 mysql 命令行工具 - 将 SQL ...
- Typora的安装与使用教程
一.安装 1.下载 下载地址:Typora 官方中文站 二.安装 1.无脑下一步即可. 三.使用教程 1.Typora系统设置 一般导出使用PDF文件比较好,性价比比较高. 2.其他设置 以下所有设置 ...
- Net 高级调试之十二:垃圾回收机制以及终结器队列、对象固定
一.简介 今天是<Net 高级调试>的第十二篇文章,这篇文章写作时间的跨度有点长.这篇文章我们主要介绍 GC 的垃圾回收算法,什么是根对象,根对象的存在区域,我们也了解具有析构函数的对象是 ...
- PWA 离线方案研究报告
本文并不是介绍如何将一个网页配置成离线应用并支持安装下载的.研究PWA的目的仅仅是为了保证用户的资源可以直接从本地加载,来忽略全国或者全球网络质量对页面加载速度造成影响.当然,如果页面上所需的资源,除 ...
- .NET8 AOT和JIT的性能,谁更高呢?
一: 有人问:.NET8 AOT和JIT的性能,谁更高呢? 原文:.NET8 AOT和JIT的性能,谁更高呢? 其实这个答案非常明显,那就是JIT的性能更高.为什么?原因在哪?因为JIT是随时可能分层 ...
- Tensorflow2.0实现VGG13
导入必要的库: import os import tensorflow as tf from tensorflow import keras from tensorflow.keras import ...
- All in One, 快速搭建端到端可观测体系
本文分享自华为云社区<All in One, 快速搭建端到端可观测体系>,作者:王磊. 随着云原生技术的应用,可观测成为云服务的主角,应用程序的部署密度及变化频率较传统环境有着巨大的变化, ...
- ElasticSearch之cat datafeeds API
命令样例如下: curl -X GET "https://localhost:9200/_cat/ml/datafeeds?v=true&pretty" --cacert ...
- APM市场冰火两重天,或许只是行业无处安放的焦虑
近两年来,无论从国内还是到国外,市场出现一种APM批判的论调,甚至有"传统APM已经落后"的个别声音出现. 可放眼望去,国外主流APM厂商如:DATADOG. Dynatrace. ...