首页 新闻 会员 周边

关于action方法的使用问题

0
悬赏园豆:10 [已解决问题] 解决于 2023-11-07 10:50
public async Task<IEnumerable<WeatherForecast>> Get()
{
    await GetTask(async () => await Test());

    return new List<WeatherForecast>();
}

private async Task GetTask(Action action)
{
    action?.Invoke();
    await Task.Delay(100);
}

private async Task Test()
{
    await Task.Delay(100);
}

上面的代码中,我异步执行Test()方法,但调用委托的时候用的Invoke(),Invoke是同步执行的方法,我这样写算同步中执行异步吗?会造成什么影响吗?

ufo233-的主页 ufo233- | 初学一级 | 园豆:92
提问于:2023-11-07 10:10
< >
分享
最佳答案
0

action?.Invoke() 相当于在同步方法中以非阻塞方式调用异步方法,建议将 Action 改为 Func<Task>

public async Task<IEnumerable<WeatherForecast>> Get()
{
    await GetTask(Test);

    return new List<WeatherForecast>();
}

private async Task GetTask(Func<Task> task)
{
    await task?.Invoke();
    await Task.Delay(100);
}

private async Task Test()
{
    await Task.Delay(100);
}
收获园豆:10
dudu | 高人七级 |园豆:30994 | 2023-11-07 10:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册