gpt4 book ai didi

c# - 任务结果到一个列表中

转载 作者:行者123 更新时间:2023-11-30 15:34:39 29 4
gpt4 key购买 nike

我的 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);
}
});
}

如何从所有返回具有 Result.Content 的字符串列表任务?这些任务是异步任务,所以基本上我必须等到所有任务都完成后才能返回结果。

最佳答案

你应该返回一个 Task<List<string>> :

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
});
}

由于这是一个 WCF 服务,您可以使用 Task<T> implement an asynchronous method pair 的方法通过返回 Task<T>Begin***方法,并打开 Task<T>End***方法。

这使得该方法以适当的方式异步。

请注意,在 C# 5 中使用 async 要容易得多/await :

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;
}

关于c# - 任务结果到一个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15938254/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com