Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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#_.net_Optimization_Task Parallel Library - Fatal编程技术网

C# 并行地从不同来源获取项目并返回结果

C# 并行地从不同来源获取项目并返回结果,c#,.net,optimization,task-parallel-library,C#,.net,Optimization,Task Parallel Library,我有一些代码看起来与此类似: public IList<Result> GetResult() { var result = new List<Result>(); result.AddRange(GetSomeItemsA()); result.AddRange(GetSomeItemsB()); result.AddRange(GetSomeItemsC()); ret

我有一些代码看起来与此类似:

    public IList<Result> GetResult()
    {
        var result = new List<Result>();

        result.AddRange(GetSomeItemsA());
        result.AddRange(GetSomeItemsB());
        result.AddRange(GetSomeItemsC());

        return result;
    }
public IList GetResult()
{
var result=新列表();
AddRange(GetSomeItemsA());
AddRange(GetSomeItemsB());
AddRange(GetSomeItemsC());
返回结果;
}
我想使用任务并行库调用GetSomeItemsA、GetSomeItemsB和GetSomeItemsC方法,或者以其他方式使其更快,然后仅在三个任务完成时返回结果


一般来说,最好的方法是什么?当我们需要从不同的来源获取项目,然后返回包含该来源所有项目的结果时,如何对其进行优化

        var result = new List<Result>();

        var firstTask = new Task<IEnumerable<Result>>(this.GetSomeItemsA);
        var secondTask = new Task<IEnumerable<Result>>(this.GetSomeItemsB);
        var thirdTask = new Task<IEnumerable<Result>>(this.GetSomeItemsC);
        firstTask.Start();
        secondTask.Start();
        thirdTask.Start();

        Task.WaitAll(firstTask, secondTask, thirdTask);

        result.AddRange(firstTask.Result);
        result.AddRange(secondTask.Result);
        result.AddRange(thirdTask.Result);

        return result;
var result=newlist();
var firstTask=新任务(this.GetSomeItemsA);
var secondTask=新任务(this.GetSomeItemsB);
var thirdTask=新任务(this.GetSomeItemsC);
firstTask.Start();
secondTask.Start();
第三个任务。开始();
Task.WaitAll(第一个任务、第二个任务、第三个任务);
result.AddRange(firstTask.result);
result.AddRange(secondTask.result);
result.AddRange(thirdTask.result);
返回结果;

我做了如下操作:

        var result = new List<Result>();

        var firstTask = new Task<IEnumerable<Result>>(this.GetSomeItemsA);
        var secondTask = new Task<IEnumerable<Result>>(this.GetSomeItemsB);
        var thirdTask = new Task<IEnumerable<Result>>(this.GetSomeItemsC);
        firstTask.Start();
        secondTask.Start();
        thirdTask.Start();

        Task.WaitAll(firstTask, secondTask, thirdTask);

        result.AddRange(firstTask.Result);
        result.AddRange(secondTask.Result);
        result.AddRange(thirdTask.Result);

        return result;
var result=newlist();
var firstTask=新任务(this.GetSomeItemsA);
var secondTask=新任务(this.GetSomeItemsB);
var thirdTask=新任务(this.GetSomeItemsC);
firstTask.Start();
secondTask.Start();
第三个任务。开始();
Task.WaitAll(第一个任务、第二个任务、第三个任务);
result.AddRange(firstTask.result);
result.AddRange(secondTask.result);
result.AddRange(thirdTask.result);
返回结果;

您可以使用PLINQ执行以下操作:

public IList<Result> GetResult()
{
    return new Func<IEnumerable<Result>>[] { GetSomeItemsA, GetSomeItemsB, GetSomeItemsC  }
        .AsParallel()
        .SelectMany(f => f())
        .ToList();
}
public IList GetResult()
{
返回新的Func[]{GetSomeItemsA,GetSomeItemsB,GetSomeItemsC}
.天冬酰胺()
.SelectMany(f=>f())
.ToList();
}

您可以使用PLINQ执行以下操作:

public IList<Result> GetResult()
{
    return new Func<IEnumerable<Result>>[] { GetSomeItemsA, GetSomeItemsB, GetSomeItemsC  }
        .AsParallel()
        .SelectMany(f => f())
        .ToList();
}
public IList GetResult()
{
返回新的Func[]{GetSomeItemsA,GetSomeItemsB,GetSomeItemsC}
.天冬酰胺()
.SelectMany(f=>f())
.ToList();
}

是否
GetSomeItems
返回
任务
?什么版本的.NET?嗨,不,它现在不返回任务。NET的4.0版。我正在调用的三个方法我希望被并行调用,这样我就不必等待方法A完成才能调用方法B来获取我的项目。项目是否必须与现在的顺序相同(即先从A开始,然后从B开始,然后从C开始)?不,顺序不重要,当我得到结果时,我可以按照我想要的方式对它们进行排序。
GetSomeItems
是否返回一个
Task
?什么版本的.NET?嗨,不,它现在不返回任务。NET的4.0版。我正在调用的三个方法我希望被并行调用,这样我就不必等待方法A完成才能调用方法B来获取我的项目。项目是否必须与现在的顺序相同(即先从A开始,然后从B开始,然后从C开始)?不,顺序不重要,当我得到结果时,我可以按照我想要的方式对它们进行排序。你可以调用
任务.Factory.StartNew()
,而不是首先创建
任务和
开始()
,你只需调用
任务.Factory.StartNew()
,而不是首先创建
任务和
开始()
,你可以调用
任务.Factory.StartNew()