我正在编写一些执行某些Web请求的代码,操作答案并将结果返回给调用者。在我看来,异步/等待的自然环境。 这是我写的方法:
protected async Task<ProcessingResult> ProcessWebPagesAsync(/* args */)
{
// awaits and other code here
}
调用者在专门为运行这些请求而创建的线程上运行,此时我无法更改实现。 我的问题是:
public class MyProcessor : ProcessorBase
{
public override ProcessingResult ProcessWebPages(/* args */)
{
return this.ProcessWebPagesAsync(/* args */).Result;
}
protected async Task<ProcessingResult> ProcessWebPages(/* args */)
{
// awaits and other code here
}
}
因此,ProcessorBase.ProcessWebPages()
在“专用”线程上调用。
在这里使用async / await真的有意义吗?我能获得福利吗?
答案 0 :(得分:3)
将async/await
与I / O绑定操作一起使用的好处是,您可以避免分配专用Thread
的成本,这将主要阻止等待从网络硬件返回响应。当您await
时,正在处理工作并在返回响应时通过IOCP池回调,并且您可以设置您希望其余方法(Continuation)运行的位置(Threadpool线程,UI线程)等等。)
我认为在专用线程上运行ProcessorBase.ProcessWebPages
没有特别的好处。如果可以的话,你应该避免为你的工作分配这样一个线程,而是使用纯async
代替。我还建议坚持异步方法命名约定并将方法名称更改为ProcessorBase.ProcessWebPagesAsync