由于小弱实在太弱,研究了一个礼拜还是没弄会,所以大神闲直接回答这个问题太麻烦,告诉俺下面的Java代码怎么用c#来写也是好的。
下面这段Java线程池的代码(双击下面的图片可以看到清晰的代码)主要用到了ExcutorService、CompletionService<V> 这两个类的用法我能看懂。
现在我需要将其翻译为C#.NET中的代码表示,主要是想对红色部分做简单的替换。
ExcutorService可以想到用C#中的ThreadPool来做对应替换, 但CompletionService我在google上查了一天资料还是不知道该怎么办
,请大家帮帮忙。
下面给出相应文字版的Java代码:
ExecutorService pool = null;
pool = Executors.newFixedThreadPool(BaseBlockUtil.THREAD_NUN);
CompletionService<BlockObject> completionService = new ExecutorCompletionService<BlockObject>(pool);
int runnerThread = 0;
foreach (BlockObject blockObject in putExtra.processes)
{
runnerThread++;
while (runnerThread > (BaseBlockUtil.THREAD_NUN + 1))
{
completionService.take().get();
runnerThread--;
}
BlockUpload task = new BlockUpload(blockObject, jsonObjectRet, putExtra, token, httpClient, uploadBatch);
completionService.submit(task);
}
for (int i = 0; i < runnerThread; i++)
{
completionService.take().get();
}
pool.shutdown();
CompletionService的作用:
CompletionService是用来在批处理任务中保存执行的结果的。
CompletionService的目的是为了解耦生产者和消费者
ThreadPool适合多个互不干扰的并发任务 需要所有任务都完成后才能继续处理结果
How to: Use a Thread Pool
c#可以使用并行化AsParallel ->