【发布时间】:2011-05-23 05:14:39
【问题描述】:
这可能是由于对底层发生的事情缺乏了解,或者只是对一般的线程缺乏了解。当用户登录时,我需要运行一些调用 Web 服务的任务来更新系统中的数据。由于这些服务可能需要相当长的时间,我将整个过程线程化。但是,即使我认为我正在与我的应用程序分开的线程中运行整个系列的任务,我的应用程序也会等到被调用的函数完成后再继续。
WindowsIdentity identity = WindowsIdentity.GetCurrent();
Manager manager = (Manager)Session["Manager"];
ThreadPool.QueueUserWorkItem(new SafeWaitCallback().Call(identity, delegate(object noCallBack)
{
manager.RunAccountUpdater(identity);
}));
应用程序挂起,直到函数“RunAccountUpdater”完成并发生回调。我在做什么错/不理解?
【问题讨论】:
-
这里有相关的线程同步代码吗?加入?锁?互斥体?有什么类似于 Control.Invoke 的吗?还有什么可能阻止的吗?
-
new SafeWaitCallback().Call同步运行。只有它的结果(我假设是一个 WaitCallback)将被安排在 ThreadPool 上。您确定是manager.RunAccountUpdater而不是new SafeWaitCallback().Call阻止了您的应用程序吗?你能添加SafeWaitCallback类的完整代码吗? (与this 相比,您似乎已对其进行了修改)。
标签: c# asp.net multithreading threadpool