jjzjj

parallel-processing

全部标签

c# - 将 LINQ 与 CancellationToken 一起使用的正确方法

我正在尝试使用CancellationToken编写支持取消的LINQ查询.NET框架中提供的机制。但是,尚不清楚结合取消和LINQ的正确方法是什么。使用PLINQ,可以这样写:varresultSequence=sourceSequence.AsParallel().WithCancellation(cancellationToken).Select(myExpensiveProjectionFunction).ToList();不幸的是,WithCancellation()仅适用于ParallelEnumerable-因此它不能与普通的旧LINQ查询一起使用。当然,可以使用With

c# - Task.Factory.StartNew 或 Parallel.ForEach 用于许多长时间运行的任务?

这个问题在这里已经有了答案:9年前关闭。PossibleDuplicate:Parallel.ForEachvsTask.Factory.StartNew我需要在ThreadPool中运行大约1,000个任务每晚一次(这个数字将来可能会增加)。每个任务都在执行长时间运行的操作(从Web服务读取数据)并且是非CPU密集型.AsyncI/O不是此特定用例的选项。给定一个IList参数,我需要DoSomething(stringx).我试图在以下两个选项之间进行选择:IListtasks=newList();foreach(varpinparameters){tasks.Add(Task.F

c# - Process.Start(/* pdf 路径 */) 不适用于 Windows 8 上的 Adob​​e Reader

我能够在我的C#/WPF应用程序中创建PDF并使用以下命令运行它们:Process.Start(_pathToPDFFile);这适用于Adob​​eAcrobat,但不适用于Adob​​eReader。安装Adob​​eReader后,Process.Start()不执行任何操作,除非Reader进程已在任务管理器中运行。当我尝试启动PDF时,如何让Adob​​eReader显示PDF? 最佳答案 在我们的案例中,问题仅在从VisualStudio启动应用程序时重现-直接启动.exe会按预期工作。经过一些调试,发现是VisualS

c# - 并行框架和避免虚假共享

最近,我回答了一个关于优化用于生成任意基数的每个排列的可能并行化方法的问题。我发布了一个类似于Parallelized,poorimplementationcodeblocklist的答案,几乎立即有人指出了这一点:Thisisprettymuchguaranteedtogiveyoufalsesharingandwillprobablybemanytimesslower.(credittogjvdkamp)他们是对的,死亡很慢。也就是说,我研究了这个话题,发现了一些interestingmaterialandsuggestions(仅存档MSDN杂志,.NET问题:虚假共享)与它作斗

c# - Process.Start() 启动的应用程序未获取参数

使用C#,我尝试使用Process.Start()将命令行参数传递给新进程:stringpath=@"C:\Demo\Demo.exe";stringarguments="onetwothree";ProcessStartInfostartInfo=newProcessStartInfo{FileName=path,Arguments=arguments};varprocess=Process.Start(startInfo);我的C应用程序Demo.exe只是回显命令行参数:intmain(intargc,char*argv[]){intcount=0;//Displayeachco

c# - Process.Start() 比在控制台中执行慢得多

我在使用Process.Start()执行.exe时遇到性能问题。.NET的执行时间大约是控制台的5倍。什么会导致这个?这是一个测试程序:publicstaticvoidMain(string[]argv){for(inti=0;i结果是这样的:0Elapsedtime4310ms.1Elapsedtime4330ms.2Elapsedtime4280ms....在cmd窗口中运行它几乎立即返回(不到1秒的执行时间)。尝试使用在控制台中对其进行计时>powershellMeasure-Command{cmd/cstart/wait%EXE%%ARGS%}执行时间大约为750毫秒,快了5

c# - 如何使用Task Parallel Library(TPL)实现重试逻辑

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Retryataskmultipletimesbasedonuserinputincaseofanexceptionintask我正在寻找一种在TPL中实现重试逻辑的方法。我想要一个通用的函数/类,它能够返回一个任务,该任务将执行给定的操作,并且在出现异常的情况下将重试该任务,直到给定的重试次数为止。我尝试使用ContinueWith并在出现异常时让回调创建一个新任务,但它似乎只适用于固定数量的重试。有什么建议吗?privatestaticvoidMain(){TasktaskWithRetry=Create

c# - 单元测试、死锁和竞争条件

关于如何为可能容易出现死锁和竞争条件的代码编写可重复的单元测试有什么建议吗?现在我倾向于跳过单元测试并专注于压力测试。问题是您可以运行压力测试5次并看到五个不同的结果。编辑:我知道这可能只是一个梦想,但如果有一种方法可以控制单个线程并使它们一次执行一条指令,那么我可能会有所作为。 最佳答案 看看TypeMock赛车手(处于测试阶段)编辑:实际上是Alphahttp://www.typemock.com/Typemock_software_development_tools.html 关于

c# - Parallel.ForEach 丢失数据

Parallel.ForEach有助于提高性能,但是,我发现数据丢失了。已尝试-变量结果、处理数据为ConcurrentBag1)Parallel.ForEach(results,()=>newConcurrentBag(),(n,loopState,localData)=>{returnProcessData(n);//ProcessDatacomplicatedbusinesslogic},(localData)=>AddRows(localData,processedData,obj));2)awaitTask.Run(()=>Parallel.ForEach(results,i

c# - 在 ContinueWith 中观察任务异常

有多种方法可以观察任务中抛出的异常。其中之一在ContinueWith和OnlyOnFaulted中:vartask=Task.Factory.StartNew(()=>{//Throwsanexception//(possiblyfromwithinanothertaskspawnedfromwithinthistask)});varfailureTask=task.ContinueWith((t)=>{//Flattenandloop(sincetherecouldhavebeenmultipletasks)foreach(varexint.Exception.Flatten().