Sol*_*rio 0 c# linq multithreading generic-collections task-parallel-library
我想知道做一个的替代方案toProcess.RemoveAll
,但并行.今天我的代码就像我的例子一样运作良好,但顺序,我想和平相处.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ParallelTest
{
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
List<VerifySomethingFromInternet> foo = new List<VerifySomethingFromInternet>();
foo.Add(new VerifySomethingFromInternet(@"id1", true));
foo.Add(new VerifySomethingFromInternet(@"id2", false));
foo.Add(new VerifySomethingFromInternet(@"id3", true));
foo.Add(new VerifySomethingFromInternet(@"id4", false));
foo.Add(new VerifySomethingFromInternet(@"id5", true));
foo.Add(new VerifySomethingFromInternet(@"id6", false));
DoSomethingFromIntert bar = new DoSomethingFromIntert();
bar.DoesWork(foo);
Console.ReadLine();
}
}
public class DoSomethingFromIntert
{
bool RemoveIFTrueFromInternet(VerifySomethingFromInternet vsfi)
{
Console.WriteLine(String.Format("Identification : {0} - Thread : {1}", vsfi.Identification, Thread.CurrentThread.ManagedThreadId));
// Do some blocking work at internet
return vsfi.IsRemovable;
}
public void DoesWork(List<VerifySomethingFromInternet> toProcess)
{
Console.WriteLine(String.Format("total : {0}", toProcess.Count));
//Remove all true return
toProcess.RemoveAll(f => this.RemoveIFTrueFromInternet(f));
Console.WriteLine(String.Format("total : {0}", toProcess.Count));
}
}
public class VerifySomethingFromInternet
{
public VerifySomethingFromInternet(string id, bool remove)
{
this.Identification = id;
this.IsRemovable = remove;
}
public string Identification { get; set; }
public bool IsRemovable { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
var newList = toProcess.AsParallel ()
.Where (f => !this.RemoveIFTrueFromInternet(f))
.ToList ();
toProcess = newList;
Run Code Online (Sandbox Code Playgroud)
可能这会回答你的问题,但我不确定它真的更快.尝试并衡量.
请注意,这可能会更改列表中元素的顺序.如果您关心订单,请在AsOrdered
之后添加AsParallel
.(感谢weston的[隐含]提示).
归档时间: |
|
查看次数: |
1047 次 |
最近记录: |