gpt4 book ai didi

c# - 如何使用 async 关键字并行调用方法?

转载 作者:行者123 更新时间:2023-11-30 19:42:51 25 4
gpt4 key购买 nike

现在我有3个方法

    IList<Car> cars = Service.GetCars(20);
IList<Shoe> shoes = Service.GetShoes(20);
IList<Bike> bike = Service.GetBikes(20);

我想使用 async 关键字并行调用并等待。我真的不明白该怎么做。以下是 GetMethod 的摘要...您将 async 关键字放在哪里?我在哪里创建任务?我想像异步 js 库一样简单。 https://github.com/caolan/async/

   public IList<Car> GetCars(int num){
return repository.GetCars(num);
}

最佳答案

如果你想一次调用所有三个方法,你需要调用异步版本:

var carTask = Service.GetCarsAsync(20);
var showTask = Service.GetShoesAsync(20);
var bikeTask = Service.GetBikesAsync(20);
IList<Car> cars = await carTask;
IList<Shoe> shoes = await shoeTask;
IList<Bike> bike = await bikeTask;

前三行开始异步操作,每行返回一个Task<IList<T>>。 . await调用“等待”它们的完成并返回实际值。

您可以将它们写在同一行上,但如上拆分它们会导致所有三个异步操作立即开始,然后在它们返回时获取结果。如果将它们放在同一行,即:IList<Car> cars = await Service.Get... ,那么操作将保持异步,但第二个操作要等到第一个操作完成后才会开始。

如果您自己编写方法,则需要包装调用。如果您没有现有异步方法的选项,您可以包装它:

public Task<IList<Car>> GetCars(int num)
{
return Task.Run(() => repository.GetCars(num));
}

但是,如果您的 repository支持异步方法,最好直接使用它们而不是调用Task.Run ,因为这实际上是通过使用 ThreadPool 线程将异步调用包装在同步代码周围。一般来说,这不是一个好的设计,因为最好让同步代码保持同步并在使用点包装它而不是“隐藏”它不是真正异步的事实。

关于c# - 如何使用 async 关键字并行调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16743976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com