【发布时间】:2013-04-25 06:53:58
【问题描述】:
我有一个使用两个 BackgroundWorker 的服务器应用程序:
1) 用于不断检查 SVN 存储库是否更新。
2) 用于管理进程队列。
BackgroundWorker revisionsWorker = new BackgroundWorker();
revisionsWorker.DoWork += (queueSender1, queueEvent1) => checkRevision();
revisionsWorker.RunWorkerAsync();
BackgroundWorker queueWorker = new BackgroundWorker();
queueWorker.DoWork += (queueSender2, queueEvent2) => manageComputersQueue();
queueWorker.RunWorkerAsync();
当 SVN 更新时,函数checkRevision() 更新本地存储库,运行一些脚本,并使用devenv.com 编译解决方案。
queueWorker 检查服务器是否正忙于运行checkRevision()。如果它不忙,它会根据它们在队列中的位置运行进程。
我的问题是,如果 SVN 已更新,并且 checkRevision() 正在运行(需要一些时间..)manageComputersQueue() 在任何时候都不会被访问,直到 checkRevision() 完成。
意思是,我希望manageComputersQueue() 一直运行,如果服务器忙于执行其他任务,它会通知客户端服务器当前正忙。
是否有可能当 1 个后台工作人员正在做一些事情时,其他后台工作人员正在等待它完成,即使它们都异步运行?
【问题讨论】:
-
后台工作人员是否在使用共享资源(例如用于报告进度的 UI 线程、文件、锁……)?
-
有一个全局布尔值表明服务器还活着
m_serverAlive。checkRevision()和manageComputersQueue()都运行在:while (m_serverAlive)循环中。他们不共享其他资源。 -
你有没有看过这个问题:stackoverflow.com/questions/10694271/…(未完成)
标签: c# multithreading asynchronous backgroundworker