task-parallel-library
全部标签 我最近看到这段代码是由我们为我们工作的承包商编写的。它要么非常聪明,要么非常愚蠢(我认为是后者,但我想要第二个意见)。我在asyncawait上的速度不是很快。基本上它是这样工作的:publicboolSend(TemplatedMessageDtomessage){returnTask.Run(()=>SendAsync(message)).GetAwaiter().GetResult();}publicasyncTaskSendAsync(TemplatedMessageDtomessage){//codedoingstuffvarresults=await_externalres
我正试图围绕TPL数据流block中的“完成”进行思考。特别是,TransformBlock似乎从未完成。为什么?示例程序我的代码计算从1到1000的所有整数的平方。为此我使用了一个BufferBlock和一个TransformBlock。在我的代码后面,我等待TransformBlock完成。但是,该block从未真正完成,我不明白为什么。staticvoidMain(string[]args){varbufferBlock=newBufferBlock();varcalculatorBlock=newTransformBlock(i=>{Console.WriteLine("Cal
我有一些代码如下:publicvoidStart(){varwatch=newStopwatch();watch.Start();Task.Factory.StartNew(MyMethod1);Task.Factory.StartNew(MyMethod2);watch.Stop();Log(watch.ElapsedMilliseconds);Task.Factory.StartNew(MyMethod3);}因为MyMethod1和MyMethod2被异步调用watch.Stop()在错误的时间被调用。我如何确保在MyMethod1和MyMethod2完成后调用并记录.Stop但
在等待API发布完成时抛出AggregateException我该如何解决这个问题?我的API调用类似这样using(varhttpClient=newHttpClient()){httpClient.BaseAddress=newUri(workflowUrl);vartask=httpClient.PostAsJsonAsync("api/apiname/execute/",executeModel).ContinueWith(x=>x.Result.Content.ReadAsAsync().Result);Taskcontinuation=task.ContinueWith(x
我非常喜欢使用C#5.0异步编程。然而,有几个地方更新旧代码以与TAP模型保持一致给我带来了问题。这是其中之一-我不确定为什么Task在TResult中不是协变的,但在尝试更新协变接口(interface)以从同步模式移动到异步模式时,它给我带来了问题:旧代码:publicinterfaceIInitializable//**outgenericmodifier**{//////Booleantoindicateifclassisready///boolIsInitialized{get;}//////Callsforinstancetobeinitializedusingcurren
我有这个简单的方法:staticintWork(strings){returns.Length;}我可以运行它:Tasktask=Task.Factory.StartNew(()=>Work("lalala"));...intresult=task.Result;或者用这个:Funcmethod=Work;IAsyncResultmyIasync=method.BeginInvoke("lalala",null,null);...intresult=method.EndInvoke(myIasync);他们都使用线程池线程。都等待执行完成(读取值时)两者都向调用者重新抛出任何异常。我什
我有一个电话消息应用程序,其中有很多消息需要处理。由于电话端口有限,所以消息将被先进先出处理。每条消息都有一个标志“Acknowledge”,指示已处理的消息。它当然被初始化为false。我想将所有消息放入一个队列,然后用多个线程或任务处理它们。publicclassMessageQueue{publicQueueMessageWorkItem{get;set;}publicMessagesMessage{get;set;}publicMessageQueue(){MessageWorkItem=newQueue();Message=newMessages();}publicvoidG
这是一个“这可能吗,如果可以的话,你能给我一个简单的例子吗,因为我在网上找不到一个?”类似的问题。我有许多完全独立的(即“令人尴尬的并行”)进程,我想使用C#在.NETFramework4中使用TaskParallel库并行运行这些进程。其中一些流程需要使用可通过COM/OLE自动化访问的软件。具体来说,有一个Parallel.Foreach()循环从项目列表中划分任务,基本上调用Parallel.Foreach内部的不同函数来处理处理(因此其中一些函数使用COM库来工作).这可能吗?谢谢。 最佳答案 通过TPL使用COM对象是10
给定以下代码:stringinjectedString="ReadstringoutofHttpContext";Task.Factory.StartNew(()=>{MyClassmyClass=newMyClass();myClass.Method(injectedString);}这是将字符串传递到任务/线程的最佳方式吗?我对这种方法的担忧是:垃圾收集器会知道字符串什么时候失效吗?上下文并正确清理它?有没有更好的方法将依赖项注入(inject)任务,从而打破主线程中对象的链接?这是在Asp.Net网络服务中,如果它很重要并且是一个即发即忘类型的线程,我不会等待任何类型的响应。我的
我想分享一个最近的经验,它可能对任何必须维护必须更新以调用基于任务的方法的遗留ASMXWeb服务的人有所帮助。我最近一直在将一个ASP.NET2.0项目更新到ASP.NET4.5,该项目包括一个遗留的ASMXWeb服务。作为更新的一部分,我引入了一个WebAPI接口(interface)以实现应用程序的高级自动化。ASMX服务必须与新的API共存以实现向后兼容性。该应用程序的功能之一是能够代表调用者从外部数据源(工业工厂历史学家、定制网络服务等)请求数据。作为升级的一部分,我重新编写了数据访问层的重要部分,以使用基于任务的异步模式异步请求数据。鉴于无法在ASMX服务中使用aync/aw