异步的,两个可等待的方法。只有一个 returns
Asyncronous, two awaitable methods. Only one returns
我在异步编程方面遇到了一些问题。
如果你看这个例子:
public async void SaveUsersThings(List<User> Users )
{
await SaveUsersCars(Users);
await SaveUsersHouses(Users);
}
所以我希望SaveUsersThings
执行以下两种方法:
public async Task SaveUsersCars(List<User> Users)
{
var listofCars = new List<Car>();
foreach (var item in Users)
{
var cars = await _sqlrepo.GetAllCars(item.UserId);
foreach (var car in cars)
{
listofCars.Add(car);
}
}
_sqlrepo.SaveListOfCars(listofCars);
}
然后这个(除obj外与上面相同)
public async Task SaveUsersHouses(List<User> Users)
{
var listofHouses = new List<House>();
foreach (var item in Users)
{
var houses = await _sqlrepo.GetAllHouses(item.UserId);
foreach (var house in houses)
{
listofHouses.Add(house);
}
}
_sqlrepo.SaveListOfHouses(listofHouses);
}
问题是只有第一个方法完成了它应该做的事情(将一些东西保存到数据库)。我想这与我没有完全理解这种编程有关。有人可以解释一下我如何获得两种方法 "work" 吗?
谢谢
public async void SaveUsersThings(List<User> Users )
如何知道是否有错误? async void
有效地忽略任何错误。 (我怀疑 C# 团队真的根本不想支持 async void
,但需要向后兼容一些现有的范例。关于事件处理程序的一些事情,我不知道。)基本上 void
阻止任何使用代码实际等待结果或检查该结果。所以很可能有一个 AggregateException
根本无处可去。
async
应该是 "async all the way down"。使顶级方法可等待:
public async Task SaveUsersThings(List<User> Users )
这样调用 SaveUsersThings()
的任何东西都可以等待它并检查结果。它可能无法保证 "both methods will work",但它至少可以揭示某些东西不起作用的 原因。而不是猜测。
我在异步编程方面遇到了一些问题。
如果你看这个例子:
public async void SaveUsersThings(List<User> Users )
{
await SaveUsersCars(Users);
await SaveUsersHouses(Users);
}
所以我希望SaveUsersThings
执行以下两种方法:
public async Task SaveUsersCars(List<User> Users)
{
var listofCars = new List<Car>();
foreach (var item in Users)
{
var cars = await _sqlrepo.GetAllCars(item.UserId);
foreach (var car in cars)
{
listofCars.Add(car);
}
}
_sqlrepo.SaveListOfCars(listofCars);
}
然后这个(除obj外与上面相同)
public async Task SaveUsersHouses(List<User> Users)
{
var listofHouses = new List<House>();
foreach (var item in Users)
{
var houses = await _sqlrepo.GetAllHouses(item.UserId);
foreach (var house in houses)
{
listofHouses.Add(house);
}
}
_sqlrepo.SaveListOfHouses(listofHouses);
}
问题是只有第一个方法完成了它应该做的事情(将一些东西保存到数据库)。我想这与我没有完全理解这种编程有关。有人可以解释一下我如何获得两种方法 "work" 吗?
谢谢
public async void SaveUsersThings(List<User> Users )
如何知道是否有错误? async void
有效地忽略任何错误。 (我怀疑 C# 团队真的根本不想支持 async void
,但需要向后兼容一些现有的范例。关于事件处理程序的一些事情,我不知道。)基本上 void
阻止任何使用代码实际等待结果或检查该结果。所以很可能有一个 AggregateException
根本无处可去。
async
应该是 "async all the way down"。使顶级方法可等待:
public async Task SaveUsersThings(List<User> Users )
这样调用 SaveUsersThings()
的任何东西都可以等待它并检查结果。它可能无法保证 "both methods will work",但它至少可以揭示某些东西不起作用的 原因。而不是猜测。