C# 如何使用任务处理多线程中的请求?

C# 如何使用任务处理多线程中的请求?,c#,asp.net,multithreading,C#,Asp.net,Multithreading,嗨,我有一个列表假设我们现在说它是batchList,我想先处理四个批次,然后处理另外两个批次,我怎么能做到这一点 代码如下: List<List<string>> termsBatches = searchTerms.Split(2).ToList(); //batchList Count is 6 List<Task> taskList = new List<Task>(); //initialize task list for wait fo

嗨,我有一个
列表
假设我们现在说它是batchList,我想先处理四个批次,然后处理另外两个批次,我怎么能做到这一点

代码如下:

List<List<string>> termsBatches = searchTerms.Split(2).ToList(); //batchList Count is 6
List<Task> taskList = new List<Task>(); //initialize task list for wait
foreach (List<string> batch in termsBatches)
{

 Task<SolrSearchResults> task = Task<SolrSearchResults>.Factory.StartNew(()=>
 {
      //Do Somethisng
 });

 taskList.Add(task);
 Task.WhenAll(taskList.ToArray());
 foreach (Task<SolrSearchResults> result in taskList)
 {
      //Process result
 }
List termsBatches=searchTerms.Split(2.ToList()//批处理列表计数为6
List taskList=新列表()//初始化等待的任务列表
foreach(按批次列出批次)
{
Task Task=Task.Factory.StartNew(()=>
{
//做点什么
});
任务列表。添加(任务);
Task.WhenAll(taskList.ToArray());
foreach(任务列表中的任务结果)
{
//过程结果
}
}


在处理了四个请求的结果之后,我想触发另外两个请求,那么如何实现这一点呢?

如果您想在项目到达时处理它们并使用多线程,那么您应该考虑使用Microsoft的反应式框架(NuGet“System.Responsive”)

然后,假设您有一个方法
任务GetSolrSearchResults(列表批处理)
,您可以执行以下操作:

List<List<string>> termsBatches = new List<List<string>>()
{
    new List<string>() { "apple", "banana" },
    new List<string>() { "cat", "dog" },
};

IObservable<SolrSearchResults> query =
    from batch in termsBatches.ToObservable()
    from result in Observable.FromAsync(() => GetSolrSearchResults(batch))
    select result;

IDisposable subscription =
    query
        .Subscribe(result =>
        {
            //Process result
        });
List termsBatches=新列表()
{
新列表(){“苹果”,“香蕉”},
新列表(){“猫”、“狗”},
};
可观测查询=
从termsBatches.ToObservable()中的批处理
from result in Observable.fromsync(()=>GetSolrSearchResults(批处理))
选择结果;
IDisposable订阅=
查询
.订阅(结果=>
{
//过程结果
});

你能解释得更清楚些吗?我不明白你想要什么?我会用我理解的方式描述你的任务。请您确认这一理解是对还是错。>>您有6项要处理的集合。您希望先处理前4项-以异步方式处理4个独立任务。然后,在完成所有这4项之后,在2个独立的异步任务中完成最后2项。