【发布时间】:2013-05-07 10:05:46
【问题描述】:
我有一个字符串列表,其中包含大约 20000 个字符串,每 1000 个字符长。我想使用多个后台工作人员将所有这些字符串替换为相同位置的相同字符串的反转版本。
这是我目前正在做的事情:
设置后台工作人员(8 个,因为计算机有 8 个核心)
for (int j = 0; j < 8; j++)
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += DoWork;
worker.RunWorkerCompleted += WorkComplete;
worker.RunWorkerAsync();
}
我遇到的问题是我不知道在 doWork 函数中放什么。
dowork 函数是否应该像这样循环:
private void DoWork(object sender, DoWorkEventArgs e)
{
while(list.count > 0)
{
reverse and add to list
}
}
还是应该 doWork 函数只做反转,然后将反转的字符串传递给 WorkComplete 函数?
private void DoWork(object sender, DoWorkEventArgs e)
{
reverse string
r.result = reversed string
}
【问题讨论】:
-
作为后台工作人员的替代方案,您是否查看过
Task Parallel Library? msdn.microsoft.com/en-us/library/dd460717.aspx -
您希望如何跟踪哪些列表项已被其他后台工作程序实例处理?
-
这并不是后台工作人员 (BGW) 的设计目的。你通常有一个 BGW,它不使用共享数据(除了在进程和完成事件中)。如果您希望多个事物同时处理数据,我建议您使用 TPL 并启动一个任务。
标签: c# multithreading backgroundworker