首页 > c# .NET中有没有类似Java中CompletionService的实现?(java to c# 转化)

c# .NET中有没有类似Java中CompletionService的实现?(java to c# 转化)

由于小弱实在太弱,研究了一个礼拜还是没弄会,所以大神闲直接回答这个问题太麻烦,告诉俺下面的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 ->

files.AsParallel().Sum(f => getFileCount(f));

int getFileCount(File f) {...}
【热门文章】
【热门文章】