假设你有一个方法,它包装了一个内部长时间运行的方法。这个外部方法在调用该长时间运行的方法之前/之后可能会执行少量的工作。例如:
public async Task<int> LongRunningWrapperAsync()
{
int result = await LongRunningAsync();
result++;
return result;
}
看起来使用async
生成的样板代码增加的重量并不一定值得使用await
的好处,因为它的续体基本上是琐碎的。因此,如果给定一个足够琐碎的续体,使用Task.ContinueWith
更具性能优势吗?例如:
public Task<int> LongRunningWrapperAsync()
{
return LongRunningAsync().ContinueWith(task => task.Result + 1,
TaskContinuationOptions.ExecuteSynchronously);
}
< p >< em > * 是的,“足够”和“琐碎”这两个词都含糊不清。此外,在这个刻意制造的示例中,我忽略了异常处理。我想需要处理异常意味着继续是非琐碎的。
System.Diagnostics.Stopwatch
并执行每个代码大量次数。 - Knaģisasync/await
会将异常情况和正常情况都连接到你的后续操作中,这使得开发更加容易。使用库和框架的重点通常在于处理一个琐碎概念周围的边缘情况。 - Aron