C# 将任务结果合并到单个列表中
我在我的WCF服务中有以下方法: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
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;
}