如何解决我可以通过将任务方法作为 ConcurrentQueue.Enqueue 的参数传递来自动使用 ConcurrentQueue<Task> 执行任务吗?
我想制作一个在 ConcurrentQueue 中执行任务(方法)的队列管理器。 队列管理器的功能是自动执行队列中的任何任务(方法)。 为此,我尝试将任务(方法)传递到队列中, 并尝试通过出队自动执行该任务(方法)。
这是主程序
public partial class TraderMain : Form
{
.
.
.
public static QueueManager _queueMgr ;
.
.
.
//it return instance and if it doesn't exist,make a instance
_queueMgr = SingletonBase<QueueManager>.Instance;
//start dequeueing
Task dequeueTask = Task.Factory.StartNew( () => { _queueMgr.Dequeue(); } );
.
.
.
BulkDataLoad bdl = new BulkDataLoad();
Task enqueueTask = Task.Factory.StartNew(() => bdl.sendRequestAllItemsInfo());
以下是 BulkDataLoad 的来源。
public int sendRequestAllItemsInfo()
{
foreach (CodeManager.MasterCode masterCode in lMasterCodes)
{
// enqueueing Tasks(method)
TraderMain._queueMgr.Enqueue(() => ActionWithCode(masterCode.Code));
我希望队列中的方法将通过出队自动执行。 当我执行那个程序时,工作并不完美。
排队效果很好。 但是,出队dees不起作用。 当我调试程序时,调试器不会进入方法“ActionWithCode”。
我想要的是将任务作为参数传递以自动执行。 不可能吗?如果是这样,我应该如何修改源? 下面是 QueueManager 类源。
public class QueueManager
{
static readonly int REQUEST_DELAY = 10;
public ConcurrentQueue<Task> queueTR;
private QueueManager()
{
queueTR = new ConcurrentQueue<Task>();
}
public void Enqueue(Action action,CancellationToken cancelToken = default(CancellationToken))
{
Task task = new Task(action);
queueTR.Enqueue(task);
}
public void Dequeue()
{
while (true)
{
try
{
if (queueTR.TryDequeue(out Task result)) { Debug.WriteLine("> Queue : " + result); }
Thread.Sleep(REQUEST_DELAY);
}
catch (Exception ex)
{
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。