gpt4 book ai didi

c# - await/async 与自定义线程的用法(和优势)

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

我正在编写一些代码来执行一些网络请求、处理答案并将结果返回给调用者。在我看来,async/await 很自然。这是我写的方法:

protected async Task<ProcessingResult> ProcessWebPagesAsync(/* args */)
{
// awaits and other code here
}

调用者在专为运行这些请求而创建的线程上运行,目前我无法更改实现。我的问题是:

  • 对不是来自线程池的线程使用 async/await 是否有优势?
  • 如何从现有代码的上下文中调用我的根方法? (见示例)
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 真的有意义吗?我能得到好处吗?

最佳答案

async/await 与 I/O Bound 操作一起使用的好处是您可以避免分配专用 Thread 的成本,该线程主要阻塞等待响应从网络硬件返回。当您 await 时,工作正在处理并在响应返回时通过 IOCP 池回调,您可以设置您希望其余方法(继续)在(线程池线程)上运行的位置, UI 线程等..)

我看不到在专用线程上运行 ProcessorBase.ProcessWebPages 有什么特别的好处。如果可以,您应该避免为您的工作分配这样的线程,而是使用纯 async 代替。我还建议坚持异步方法命名约定,并将您的方法名称更改为 ProcessorBase.ProcessWebPagesAsync

关于c# - await/async 与自定义线程的用法(和优势),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23863118/

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