gpt4 book ai didi

c# - ThreadPool.QueueUserWorkItem 导致应用程序挂起直到完成

转载 作者:行者123 更新时间:2023-11-30 18:43:28 29 4
gpt4 key购买 nike

这可能是由于缺乏对引擎盖下发生的事情的理解,或者仅仅是缺乏对一般线程的理解。当用户登录时,我需要运行一些调用 Web 服务的任务来更新我系统中的数据。由于服务可能会花费大量时间,因此我将整个过程进行了线程化。然而,即使我认为我是在一个独立于我的应用程序的线程中运行整个系列的任务,我的应用程序还是会等到被调用的函数完成后再继续。

WindowsIdentity identity = WindowsIdentity.GetCurrent();
Manager manager = (Manager)Session["Manager"];

ThreadPool.QueueUserWorkItem(new SafeWaitCallback().Call(identity, delegate(object noCallBack)
{
manager.RunAccountUpdater(identity);
}));

应用程序挂起,直到函数“RunAccountUpdater”完成并发生回调。我做错了什么/不明白?

最佳答案

通过你实际上逐条陈述 - 这将是显而易见的。

ThreadPool.QueueUserWorkItem(new SafeWaitCallback().Call(identity, delegate(object noCallBack) { manager.RunAccountUpdater(identity); }));

这是由内而外发生的。

  • 您声明一个委托(delegate)。
  • 然后使用 SafeWaitCallback().Call 来执行操作。
  • 然后将调用的结果排队到...线程池。

瞧 - 这是你的问题。您必须将对委托(delegate)的调用排队,而不是执行结果。

关于c# - ThreadPool.QueueUserWorkItem 导致应用程序挂起直到完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404563/

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