Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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# 如何从“中”的方法返回另一个值;“第三方”;自由党? Task[]tableOfWebClientTasks=新任务[taskCount]; 对于(int i=0;i { Parallel.ForEach(任务,任务=> { //这里我有每个任务的结果。 //但是在这个任务上执行哪个url的信息丢失了。 }); });_C#_Task Parallel Library_Parallel Extensions - Fatal编程技术网

C# 如何从“中”的方法返回另一个值;“第三方”;自由党? Task[]tableOfWebClientTasks=新任务[taskCount]; 对于(int i=0;i { Parallel.ForEach(任务,任务=> { //这里我有每个任务的结果。 //但是在这个任务上执行哪个url的信息丢失了。 }); });

C# 如何从“中”的方法返回另一个值;“第三方”;自由党? Task[]tableOfWebClientTasks=新任务[taskCount]; 对于(int i=0;i { Parallel.ForEach(任务,任务=> { //这里我有每个任务的结果。 //但是在这个任务上执行哪个url的信息丢失了。 }); });,c#,task-parallel-library,parallel-extensions,C#,Task Parallel Library,Parallel Extensions,例如,我可以创建类(有两个公共属性,一个用于任务,另一个用于url)并返回实例。但是我把这个方法和其他方法联系起来了 您对此问题有什么解决方案吗?如果您希望能够将任务与创建它们的url相关联,可以使用字典进行映射: Task<string>[] tableOfWebClientTasks = new Task<string>[taskCount]; for (int i = 0; i < taskCount; i++) { tableOfWebClient

例如,我可以创建类(有两个公共属性,一个用于任务,另一个用于url)并返回实例。但是我把这个方法和其他方法联系起来了


您对此问题有什么解决方案吗?

如果您希望能够将任务与创建它们的url相关联,可以使用字典进行映射:

Task<string>[] tableOfWebClientTasks = new Task<string>[taskCount];

for (int i = 0; i < taskCount; i++)
{
    tableOfWebClientTasks[i] = new WebClient().DownloadStringTask(allUrls[count - i - 1]);
}

Task.Factory.ContinueWhenAll(tableOfWebClientTasks, tasks =>
{
    Parallel.ForEach(tasks, task =>
    {
        //Here I have result from each task.
        //But information which url is executed on this task, is lost.
    });
});
Task[]tableOfWebClientTasks=新任务[taskCount];
var taskIdToUrl=新字典();
对于(int i=0;i
{
Parallel.ForEach(任务,任务=>
{
//要获取url,只需执行以下操作:
var url=taskIdToUrl[task.Id];
});
});

为什么要使用
continuewheall()
Paralell.ForEach()
ContinueWith()
对每个
任务
不是更好吗?请看这里:这篇文章没有解释你为什么要这样做。为什么
ContinueWith()
对每个
Task
都不适合您呢?我认为一般来说,以这种方式进行操作不是一个好主意(尽管在这种特定情况下它可能会起作用)。例如,某些异步方法可能会为多个不同的输入返回相同的
任务
,这会破坏您的代码。是的。除非有具体的理由这样做,否则我同意在每个
任务上调用
ContinueWith()
@RichardTowers谢谢,这确实是我想要的。
Task<string>[] tableOfWebClientTasks = new Task<string>[taskCount];
var taskIdToUrl = new Dictionary<int,string>();

for (int i = 0; i < taskCount; i++)
{
    var url = allUrls[count - i - 1];
    var task = new WebClient().DownloadStringTask(url);
    tableOfWebClientTasks[i] = task;
    taskIdToUrl.Add(task.Id, url);
}

TaskFactory.ContinueWhenAll(tableOfWebClientTasks, tasks =>
{
    Parallel.ForEach(tasks, task =>
    {
        // To get the url just do:
        var url = taskIdToUrl[task.Id];
    });
});