gpt4 book ai didi

c# - 使用自己的线程池继续任务

转载 作者:太空狗 更新时间:2023-10-29 20:13:30 24 4
gpt4 key购买 nike

是否可以强制 async-await 语句的继续在自定义 ThreadPool 的线程上运行?

上下文:我正在运行一个 ASP 应用程序并在后台做很多工作。我通过自己编写的 ThreadPool 完成所有工作,但如果我使用异步等待模式,则延续始终在名为“Worker Thread”的线程上运行。我很确定这是来自默认 ThreadPool 的线程,它也用于处理 HTTP 请求。这会导致这些请求饥饿,因为默认 ThreadPool 的所有线程都忙于继续我的后台工作。

最佳答案

是的。您可以创建自定义 SynchronizationContext它适用于您的自定义 ThreadPool 并在运行异步操作之前设置它。

var prevCtx = SynchronizationContext.Current; 
try
{
SynchronizationContext.SetSynchronizationContext(new ThreadPoolSynchronizationContext());

// async operations.
}
finally
{
SynchronizationContext.SetSynchronizationContext(prevCtx);
}

有关如何创建自定义 SynchronizationContext 的更多信息:Await, SynchronizationContext, and Console Apps


尽管很少需要自定义线程池。您可能应该尝试在使用内置优化器的同时进行优化。

关于c# - 使用自己的线程池继续任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959348/

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