task-parallel-library
全部标签 我最近听到了很多关于.NET4.0中的TPL的播客。它们中的大多数描述了后台事件,例如下载图像或进行计算,使用任务以使工作不会干扰GUI线程。我处理的大部分代码更多地具有多生产者/单一消费者的风格,其中来自多个来源的工作项必须排队,然后按顺序处理。一个例子是日志记录,其中来自多个线程的日志行被顺序排列到一个队列中,以便最终写入文件或数据库。来自任何单一来源的所有记录必须保持有序,并且来自同一时刻的记录在最终输出中应该彼此“接近”。所以多个线程或任务或任何东西都在调用队列:lock(_queue)//orusealock-freequeue!{_queue.enqueue(some_wo
系统。Reactiveextensionfor.NET和newC#5.0(.NET4.5)async/await追求(或基于)futureandpromisesconstructs范式(方法)。您能否给出(*)最简单的C#代码示例来说明它们之间的区别?(*)没有I/O、互联网或数据库连接是否可能?更新:好吧,如果这个问题之前似乎已经回答了,让我重新表述一下。为什么在使用native.NET的同时添加并开始使用.NET的Reactive(Rx)扩展Iobservable/IObserver+await/async?如果没有Rx(即只使用原生.NETIobservable/IObserve
我的理解是returnTask.FromResult(foo)是以下内容的简单简写:vartcs=newTaskCompletionSource();tcs.SetResult(foo);returntcs.Task;返回异常状态的任务是否有一些等价物?vartcs=newTaskCompletionSource();tcs.SetException(newNotSupportedException());//orwhateverisappropriatereturntcs.Task;我没有看到类似Task.FromException的内容。还是只抛出异常而不返回任务更合适?
TPLDataflow提供用于转换输入的TransformBlock,例如:vartb=newTransformBlock(i=>i*2);是否可以不输出某些输入,例如如果输入未通过某些验证测试?vartb=newTransformBlock(i=>{if(!ValidateInput(i)){//Dosomethingtonotoutputanythingforthisinput}//Normaloutput}如果这不可能,实现该目标的最佳模式是什么?像下面这样的东西?BufferBlockoutput=newBufferBlock();varab=newActionBlock(i=
在等待错误任务(设置了异常的任务)时,await将重新抛出存储的异常。如果存储的异常是AggregateException,它将重新抛出第一个并丢弃其余的。我们如何使用await,同时抛出原始的AggregateException,这样我们才不会不小心丢失错误信息?请注意,当然可以为此考虑hacky解决方案(例如,围绕awaittry-catch,然后调用Task.Wait)。我真的很想找到一个干净的解决方案。此处的最佳做法是什么?我想过使用自定义等待程序,但内置的TaskAwaiter包含许多我不确定如何完全重现的魔法。它调用TPL类型的内部API。我也不想重现所有这些。如果您想使用
我刚刚遇到了以下行为:for(vari=0;i{Debug.Print("Error:"+i.ToString());});}会导致一系列“错误:x”,其中大部分x等于50。类似地:vara="Before";vartask=newTask(()=>Debug.Print("Usingvalue:"+a));a="After";task.Start();将导致“使用值:之后”。这显然意味着lambda表达式中的串联不会立即发生。在声明表达式时,如何在lambda表达式中使用外部变量的副本?以下不会更好地工作(这不一定是不连贯的,我承认):vara="Before";vartask=ne
我是c#5异步功能的新手。我试图了解这两种实现之间的区别:实现1:privatevoidStart(){foreach(varurlinurls){ParseHtml(url);}}privateasyncvoidParseHtml(stringurl){varquery=BuildQuery(url);//BuildQueryissomehelpermethodvarhtml=awaitDownloadHtml(query);//...MyTypeparsedItem=ParseHtml(html);SaveTypeToDB(parsedItem);}privateasyncTask
假设我有一个不是异步但返回一个Task的方法(因为定义来自一个也用于异步实现的接口(interface))publicTaskDoWorkAsync(Guidid){//dotheworkreturn...;}返回的最佳对象是什么?我目前的选择:returnTask.Yield();returnTask.FromResult(null);//anyoftheotherbutcachedinastaticfieldandreused. 最佳答案 在Microsoft.net4.6中,Task类具有用于此目的的静态属性。任务.Compl
我正在开发一个XamarinForms移动应用程序,它有一个包含SearchBar、ListView和Map控件的页面。ListView包含一个地址列表,这些地址在map上显示为图钉。当用户在SearchBar中键入内容时,ListView会自动更新(通过ViewModel绑定(bind))。为列表过滤数据源的ViewModel方法看起来像这样......voidFilterList(){listDataSource=newObservableCollection(locationData.Where(l=>l.Address.Contains(searchBar.Text)));//
在.NET4中,是否有与.NET4.5的System.Threading.Tasks.Task.WhenAll()等效的功能??目标是将多个异步任务打包成一个任务,当所有组成任务都完成时,该任务就完成了。 最佳答案 在.NETFramework4.0中,WhenAll和WhenAny可以与已安装的AsyncCTP一起使用如果是VisualStudio2010或AsyncTargetingPack对于VisualStudio2012。然后在TaskEx类型上提供WhenAll和WhenAny方法。