0

我有许多需要运行的线程(大约 160 个)创建文件,然后将它们复制到各个地方:

'Files is basically a list of strings
'which is passed to a function that creates a file from a number of database fields
'when thats done it copies it to a number of places

       For Each x In Files
            Dim Evaluator = New Thread(Sub() API.Files.Create.Standard(x))
            Evaluator.Start()
        Next

我想要它做的是关闭 160 个左右的线程(使用许可 x)然后等待所有线程完成,然后继续执行程序的其余部分。

4

1 回答 1

6

如果您使用的是 Framework 4.0(对于 3.5 Jon Skeet 有解决方案@Can I use the task parallel library in a .Net 3.5 project?)。您可以使用 TPL(任务处理库),而不是使用 Thread。它是线程的包装器。所以简而言之,创建任务,它有静态方法 Task.WailAll 允许预期的功能。

Dim tasks = New Task(160) {}
For i As var = 0 To 160
    Dim x = i
    tasks(i) = Task.Factory.StartNew(Function() New CreateFileClass(x).[Do]())
Next

Task.WaitAll(tasks)

我使用了来自任务并行库的代码 - 知道所有任务何时完成并使用上面代码生成的在线 C# 到 VB.Net 转换器。我希望它有所帮助。

于 2013-05-01T17:26:09.660 回答