action不能await
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++;
}
}

浙公网安备 33010602011771号