class Program
{
static int i = 0; static async Task Main(string[] args)
{
for (int i = 0; i < 3; i++)
{
await RunInNewScopeAsync(async () =>
{
var n1 = await DoWorkAsync();
Console.WriteLine(n1);
});
} Console.WriteLine("finished...");
Console.ReadLine();
} static Task RunInNewScopeAsync(Action action)
{
action();
return Task.CompletedTask;
} static async Task<string> DoWorkAsync()
{
await Task.Delay(1000);
return "mxd " + i++;
}
}

  

 今天审查一处代码(

完整实例:

using System;
using System.Threading;
using System.Threading.Tasks; class Program
{
static int i = 0;
// 异步方法:模拟一个需要等待的操作
static async Task<string> DoWorkAsync()
{
// 使用 Task.Delay 进行异步等待 - 推荐
await Task.Delay(1000); // 等待3秒,期间线程可以去处理其他任务 return "mxd " + i++;
} static void RunInNewScope(Action action)
{
action();
} static Task RunInNewScopeAsync(Action action)
{
action();
return Task.CompletedTask;
} static T RunInNewScopeFunc<T>(Func<T> func)
{
return func();
} // 主方法必须是 async 才能使用 await
static async Task Main(string[] args)
{
//for (int i = 0; i < 100; i++)
//{
// // 调用异步方法并等待其完成
// var n1 = await DoWorkAsync();
// Console.WriteLine(n1);
//} for (int i = 0; i < 3; i++)
{
await RunInNewScopeAsync(async () =>
{
var n1 = await DoWorkAsync();
Console.WriteLine(n1);
});
} //for (int i = 0; i < 3; i++)
//{
// await RunInNewScopeFunc(async () =>
// {
// var n1 = await DoWorkAsync();
// Console.WriteLine(n1);
// return n1;
// });
//} Console.WriteLine("finished..."); Console.ReadLine(); }
}

  

遍历场次,切换数据库执行逻辑,,截图是简单示例),发现action的缺点;综合对比,后续建议都用func.

其他示例:

class Program
{
static int i = 0; static async Task Main(string[] args)
{
for (int i = 0; i < 3; i++)
{
await RunInNewScopeAsync(async () =>
{
var n1 = await DoWorkAsync();
Console.WriteLine(n1);
});
} Console.WriteLine("finished...");
Console.ReadLine();
} static async Task RunInNewScopeAsync(Action action)
{
action();
} static async Task<string> DoWorkAsync()
{
await Task.Delay(1000);
return "mxd " + i++;
}
}

  

action不能await的更多相关文章

  1. 小结: Async & Await

    新项目组用到Async & Await, 关于Await会不会新开不开线程,遇到什么情况会新开线程的问题网上查了很多资料都没看到直观的解释.现简单总结一下. 直接上代码: namespace ...

  2. .NET 中 如果一个Task A正在await另一个Task B,那么Task A是什么状态

    新建一个.NET Core控制台程序,输入如下代码: using System; using System.Threading; using System.Threading.Tasks; class ...

  3. ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器

    原文:Filters 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐 ASP.NET MVC 过滤器 可在执行管道的前后特定阶段执行代码.过滤器可以配置为全局有效.仅对控 ...

  4. 使用xUnit,EF,Effort和ABP进行单元测试(C#)

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 介绍 创建测试项目 准备测试基类 创建第一个测试 测试异常 在测试中使用仓储 测试异步方法 小结 介绍 在这篇博客中,我 ...

  5. 【UWP】拖拽列表项的排序功能实现

    在一些允许用户自定义栏目顺序的app(如:凤凰新闻.网易云音乐等),我们可以方便地拖拽列表项来完成列表的重新排序,进而完成对栏目顺序的重排.这个功能很人性化,而实现起来其实很简单(甚至都不用写什么后台 ...

  6. ASP.NET Core MVC 过滤器介绍

    过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...

  7. 对接第三方平台JAVA接口问题推送和解决

    前言 本节所讲为实际项目中与第三方对接出现的问题最后还是靠老大解决了问题以此作为备忘录,本篇分为三小节,一小节解析Java加密接口数据,二小节解析XML文件需注意问题,最后一节则是请求Java Soa ...

  8. 基础教程:ASP.NET Core 2.0 MVC筛选器

    问题 如何在ASP.NET Core的MVC请求管道之前和之后运行代码. 解 在一个空的项目中,更新 Startup 类以添加MVC的服务和中间件. publicvoid ConfigureServi ...

  9. [转] vue异步处理错误

    Vue.prototype.$await = async function(action) { try { await action(); } catch (err) { // 这里是你处理错误的逻辑 ...

  10. 手动搭建ABP2.1.3 Zero——基础框架

    一.基础层搭建 二.PM.Core 三.PM.EntityFramework 四.PM.Application 五.PM.WebApi 六.PM.Web(MPA) 七.PM.Web(SPA) 八.单元 ...

随机推荐

  1. 【转载】Indexer 源码分析

    Indexer 源码分析 介绍 我们知道DeltaFIFO 中的元素通过 Pop 函数弹出后,在指定的回调函数中将元素添加到了 Indexer 中. Indexer 是什么?字面意思是索引器,它就是 ...

  2. ArkUI-X与Android消息通信

    平台桥接用于客户端(ArkUI)和平台(Android或iOS)之间传递消息,即用于ArkUI与平台双向数据传递.ArkUI侧调用平台的方法.平台调用ArkUI侧的方法.本文主要介绍Android平台 ...

  3. 使用Ant Desigen在vue里面实现分页以及表头的模糊查询

    一:分页 这次使用的是后端查来的数据在前端进行分页操作: 1.1: data里面的定义 tab1pagination: { defaultPageSize: 10, defaultCurrent:1, ...

  4. ArrayList与LinkedList的增删改查

    ArrayList: 1 package com.lv.study.am.first; 2 3 //ArrayList 有下标 可重复 有序(添加到集合里面的顺序)不等于排序 4 5 6 import ...

  5. SAP Lisense太贵,又不想买那么多怎么破?

    今天群里有人提高了web dynpro for abap.说道这个,我就来了兴趣,比较接触WDA已经十年了,虽然中间有段时间没用,但是基本的技术还在. WDA在国内不受重视,但是却流传了很多版本的框架 ...

  6. CRM item status error

    订单行项目显示状态的时候报错No status object is available for <Unknown Object>,表里也没有对应行项目的状态信息. 查了相关资料,说是用re ...

  7. Java实现密码、文件MD5加密,密码sha256、sha384、sha512Hex等加密

    SHA512加密(参考:https://blog.csdn.net/zdj_Develop/article/details/89326621?utm_medium=distribute.pc_rele ...

  8. 如何在FastAPI中实现权限隔离并让用户乖乖听话?

    title: 如何在FastAPI中实现权限隔离并让用户乖乖听话? date: 2025/06/18 17:24:12 updated: 2025/06/18 17:24:12 author: cmd ...

  9. Claude Code 初体验 - Windows

    1. 前言 Cursor 和 Claude Code 都是编程神器,它们的主要区别是什么呢? Cursor 主要对不同的AI模型进行整合,提供友好的代码编辑体验,包括OpenAI 的 GPT 系列.G ...

  10. C#常规操作

    线程池:ThreadPool.SetMaxThreads(辅助线程数,活跃线程数) ThreadPool.SetMinThreads(最小空闲辅助线程,最小空闲线程) ********* 检查是否按下 ...