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是同步执行的方法,我这样写算同步中执行异步吗?会造成什么影响吗?
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);
}