【发布时间】:2015-10-30 09:32:37
【问题描述】:
所以我的代码伪类似于(依赖注入):
public DbContextA DBA { get; set; } // SQL Server 1
public DbContextB DBB { get; set; } // SQL Server 2
我现在才确定如何最有效地执行以下操作?
public Task<ActionResult> MyAction()
{
var trucks = await DBA.GetTrucksAsync();
var cars = DBA.GetCarsAsync();
var cats = await DBB.GetCatsAsync();
var dogs = DBB.GetDogsAsync();
await TaskEx.WhenAll(cars, dogs);
}
除非我弄错了,否则这不是最佳选择。我认为能够这样做会很棒:
public Task<ActionResult> MyAction()
{
IEnumerable<Truck> trucks;
IEnumerable<Car> cars;
IEnumerable<Cat> cats;
IEnumerable<Dog> dogs
var dba = Task.Run(async () => { trucks = await DBA.GetTrucksAsync(); } )
.ContinueWith(async () => { cars = await DBA.GetCarsAsync(); } );
var dbb = Task.Run(async () => { cats = await DBB.GetCatsAsync(); })
.ContinueWith(async () => { dogs = await DBB.GetDogsAsync(); });
await Task.WhenAll(dba, dbb);
}
但我目前无法对此进行测试(我很确定这是错误的)。
【问题讨论】:
-
Task.Run在 ASp.NET 上会变得更糟,因为您将释放一个线程只是为了切换到具有相同特性的另一个线程。 `任务执行?你在哪个版本的框架上运行? -
您可以使用 AsyncController,如果您需要进行长时间运行的调用,它会更好一些,因为它会在等待响应的时间释放线程。
-
@PauloMorgado 是的,应该是
Task。我知道Task.Run()在那里展示了我正在尝试做的事情,而不是实际如何去做。 -
不,应该没什么!
标签: asp.net-mvc async-await entity-framework-6 dbcontext