async等待在调用aync方法时返回Task <List <T >>而不是List <T>

Ehs*_*jad 6 .net c# asynchronous task-parallel-library async-await

我试图了解异步等待的用法,我研究了一些博客文章,现在我已经制作了一个测试代码,但它没有按照我期望的方式工作.

我有一个返回List的方法:

private List<Employee> GetEmployees()
{

 IList<Employee> list = new List<Employee>();
 list.Add(new Employee() { Id = 1, Age = 20, Name = "Kavin" });
 list.Add(new Employee() { Id = 2, Age = 30, Name = "Alen" });
 list.Add(new Employee() { Id = 3, Age = 20, Name = "Suresh" });
 list.Add(new Employee() { Id = 4, Age = 30, Name = "Jay" });
 list.Add(new Employee() { Id = 5, Age = 20, Name = "Nanda" });
 list.Add(new Employee() { Id = 5, Age = 20, Name = "Kavin" });
 list.Add(new Employee() { Id = 5, Age = 20, Name = "Kavin" });
 list.Add(new Employee() { Id = 1, Age = 23, Name = "Test" });

 return list;
}
Run Code Online (Sandbox Code Playgroud)

然后我写了我的异步方法:

private async Task<List<Employee>> TestEmployeesGetAsync()
{

  var result = await Task.Run(() => GetEmployees());

  return result;
}
Run Code Online (Sandbox Code Playgroud)

当我称这种方法时:

var Result = TestEmployeesGetAsync();
Run Code Online (Sandbox Code Playgroud)

视觉工作室告诉我它返回Task<List<T>>它的用法是:

List<Employee> result = await TestEmployeesGetAsync();
Run Code Online (Sandbox Code Playgroud)

为什么我需要等待调用方法如果我把await它给出编译器错误当然因为也await应该有异步.有人可以清楚我的想法如何调用它,以便我可以得到List<T>而不是Task<List<T>>

Yuv*_*kov 7

为什么我需要等待调用方法,如果我等待它给出编译器错误,当然因为await也应该具有异步.

编译器需要一些依赖项才能理解您正在运行异步方法.信号是async方法声明中的修饰符.将其标记为async,您可以使用await关键字.这就是为什么异步在调用堆栈中"一直"传播的原因,就像调用一个异步方法并需要等待其结果一样,您需要使用async修饰符标记使用方法.

为了使您的方法有效,您需要执行以下操作:

public async Task GetEmployeesAsync()
{
   List<Employees> result = await TestEmployeesGetAsync();
}
Run Code Online (Sandbox Code Playgroud)

作为旁注,请注意不要在同步方法上公开异步包装.