【发布时间】:2014-02-19 19:59:30
【问题描述】:
我在 ASP.NET 应用程序中有一个方法,需要花费大量时间才能完成。在一个用户请求期间,对该方法的调用最多可能发生 3 次,具体取决于用户提供的缓存状态和参数。每次通话大约需要 1-2 秒才能完成。方法本身是对服务的同步调用,不可能重写实现。
所以对服务的同步调用如下所示:
public OutputModel Calculate(InputModel input)
{
// do some stuff
return Service.LongRunningCall(input);
}
并且方法的用法是(注意,方法的调用可能不止一次):
private void MakeRequest()
{
// a lot of other stuff: preparing requests, sending/processing other requests, etc.
var myOutput = Calculate(myInput);
// stuff again
}
我尝试从我这边更改实现以提供此方法的同步工作,这就是我到目前为止的结果。
public async Task<OutputModel> CalculateAsync(InputModel input)
{
return await Task.Run(() =>
{
return Calculate(input);
});
}
用法(部分“做其他事情”代码与调用服务同时运行):
private async Task MakeRequest()
{
// do some stuff
var task = CalculateAsync(myInput);
// do other stuff
var myOutput = await task;
// some more stuff
}
我的问题如下。我是否使用正确的方法来加快 ASP.NET 应用程序中的执行速度,或者我是否在尝试异步运行同步代码做不必要的工作?谁能解释为什么第二种方法在 ASP.NET 中不是一个选项(如果它真的不是)?另外,如果这种方法适用,如果这是我们目前可能执行的唯一调用,我是否需要异步调用这种方法(我有这种情况,在等待完成时没有其他事情要做)?
网上关于这个主题的大多数文章都涵盖了使用 async-await 方法和代码,它已经提供了 awaitable 方法,但这不是我的情况。 Here 是描述我的案例的好文章,它没有描述并行调用的情况,拒绝包装同步调用的选项,但我认为我的情况正是这样做的机会。
提前感谢您的帮助和提示。
【问题讨论】:
标签: c# asp.net asynchronous async-await c#-5.0