Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将任务结果合并到单个列表中_C#_Multithreading_C# 4.0_Task Parallel Library - Fatal编程技术网

C# 将任务结果合并到单个列表中

C# 将任务结果合并到单个列表中,c#,multithreading,c#-4.0,task-parallel-library,C#,Multithreading,C# 4.0,Task Parallel Library,我在我的WCF服务中有以下方法: public List<string> ProcessTask(IEnumerable<string> data) { var contentTasks = .......... List<string> contentWeb = new List<string>(); Task.Factory.ContinueWhenAll(contentTasks, task

我在我的WCF服务中有以下方法:

public List<string> ProcessTask(IEnumerable<string> data)
{             
    var contentTasks = ..........
    List<string> contentWeb = new List<string>();

    Task.Factory.ContinueWhenAll(contentTasks, tasks =>
    {
        foreach (var task in tasks)
        {
            if (task.IsFaulted)
            {
                Trace.TraceError(task.Exception.GetBaseException().Message);
                continue;
            }

            if (task.Result == null || String.IsNullOrEmpty(task.Result.Content))
            {
               continue;
            }

            contentWeb.Add(task.Result.Content);
        }
    });
}
公共列表处理任务(IEnumerable数据)
{             
var contentTasks=。。。。。。。。。。
List contentWeb=新列表();
Task.Factory.continuewhell(contentTasks,tasks=>
{
foreach(任务中的var任务)
{
if(task.IsFaulted)
{
Trace.TraceError(task.Exception.GetBaseException().Message);
继续;
}
if(task.Result==null | | String.IsNullOrEmpty(task.Result.Content))
{
继续;
}
添加(task.Result.Content);
}
});
}
如何从all返回包含
Result.Content
的字符串列表
任务是什么?这些任务是异步任务,因此基本上我必须等到所有任务完成后才能返回结果。

您应该返回
任务


而不是继续使用Task.WaitAll(contentTasks)

您可以在WCF中返回任务吗?或者我需要另一个调用this@JustinHomes您可以使用任务来进行异步实现(begin/end方法),尽管在C#4中它最多也很笨重。4.5/VS2012的生成器会自动处理WCF中的任务,但请参见:您可以从lambda返回列表,然后直接返回将由
continuewhall()
@ReedCopsey返回的
任务
,而不是使用
TaskCompletionSource
?这是链接示例中的BeginDoWork方法吗?我需要编写一个EndWork?不要徒劳地提到
Async
public Task<List<string>> ProcessTasksAsync(IEnumerable<string> data)
{
    var contentTasks = ..........
    return Task.Factory.ContinueWhenAll(contentTasks, tasks =>
    {
        var contentWeb = new List<string>(); // Build this in the continuation
        foreach (var task in tasks)
        {
            // ...same code...

            contentWeb.Add(task.Result.Content);

        }
        return contentWeb; // Set the task's result here
    });
}
public async Task<List<string>> ProcessTasksAsync(IEnumerable<string> data)
{
    var contentTasks = ..........

    await Task.WhenAll(contentTasks);

    var contentWeb = new List<string>(); // Build this in the continuation
    foreach (var task in contentTasks)
    { 
        // ...same code...

        contentWeb.Add(task.Result.Content);
    }

    return contentWeb;
}