草庐IT

send_task

全部标签

c# - Task.WaitAll 方法与 Parallel.Invoke 方法

我有示例代码来比较并行方法和任务方法的处理时间。本实验的目的是了解它们的工作原理。所以我的问题是:为什么Parallel比Task工作得更快?我的结果是否意味着我应该使用Parallel而不是Task?我应该在哪里使用Task和Parallel?与并行相比,使用任务有什么好处?Task是否只是ThreadPool.QueueUserWorkItem方法的包装?publicTaskSomeLongOperation(){returnTask.Delay(3000);}staticvoidMain(string[]args){Programp=newProgram();Listtasks=

c# - SynchronizationContext.Send 和 SynchronizationContext.Post 有什么区别?

感谢JeremyMiller在FunctionalProgrammingForEveryday.NETDevelopment中的出色工作,我有一个工作命令执行器,它可以做我想做的一切(在线程池上做繁重的工作,将结果或错误发送回同步上下文,甚至将进度发送回同步上下文),但我无法解释为什么使用SynchronizationContext.Send来自线程池和Synchronization.Post从Func传递到执行繁重工作的方法。我已经多次阅读文档,但我无法直觉了解其中的区别。我应该从一个名为Send和一个名为Post的事实中得到什么?我感觉到神奇之处在于Send“启动一个同步请求”和P

c# - 为什么调用不明确? 'Task.Run(Action)' 和 'Task.Run(Func<Task>)'

考虑以下代码:publicvoidCacheData(){Task.Run((Action)CacheExternalData);Task.Run(()=>CacheExternalData());Task.Run(CacheExternalDataTask);Task.Run(CacheExternalData);}publicTaskCacheExternalDataTask(){//LongrunningcodereturnTask.FromResult("Data");}publicvoidCacheExternalData(){//Longrunningcode}为什么Tas

c# - 拦截通过 DynamicProxy 返回通用 Task<> 的异步方法

我的问题与这篇文章有关InterceptthecalltoanasyncmethodusingDynamicProxy我想实现与返回Task的异步方法一起工作的拦截器或Task结果。我使用下一个代码返回ContinueWith结果(以便调用方方法在拦截器完成工作时等待)vartask=invocation.ReturnValueasTask;invocation.ReturnValue=task.ContinueWith(c=>{codethatshouldexecuteaftermethodfinish});以上代码适用于Task结果,但在Task的情况下结果ContinueWith

c# - .NET 4.6 的 Task.CompletedTask 有什么意义?

Thisblogpost提到了新的任务API,包括一个新的Task.CompletedTask.NET4.6中引入的属性。为什么添加这个?这比Task.FromResult(whatever)有什么好处? 最佳答案 Task.FromResult(whatever)适用于Task,但在4.6之前,非通用任务没有任何内容。你可以使用FromResult使用虚拟值并将其隐式转换为Task,但这有点混淆了意图(您实际上并没有返回任何异步值)并在下面分配对象(而CompletedTask可以缓存并在所有调用者之间共享)。在当前(4.5.2及

c# - Task.WaitAll 在 ASP.NET 中挂起多个等待任务

下面是我遇到问题的代码的简化版本。当我在控制台应用程序中运行它时,它按预期工作。所有查询并行运行,Task.WaitAll()在它们全部完成时返回。但是,当此代码在Web应用程序中运行时,请求就会挂起。当我附加调试器并全部中断时,它显示执行正在等待Task.WaitAll()。第一个任务已经完成,但其他任务从未完成。我不明白为什么它在ASP.NET中运行时挂起,但在控制台应用程序中运行良好。publicFoo[]DoWork(int[]values){intcount=values.Length;Task[]tasks=newTask[count];for(inti=0;iGetFoo

c# - 使用 Tasks (TPL) 库会使应用程序多线程吗?

最近在接受采访时,我被问到了这个问题。问:你写过多线程应用程序吗?答:是的问:介意解释更多吗?答:我用过Tasks(任务并行库)执行一些任务,如waitingforsomeinfofrominternetwhileloadingUI.这提高了我的应用程序可用性。问:但是,刚刚你用过TPL表示您写了一个multithreaded应用?我:(不知道说什么1)那么,究竟什么是多线程应用程序?和用Tasks有区别吗? 最佳答案 任务可用于表示在多个线程上发生的操作,但它们不是必须的。可以编写仅在单个线程中执行的复杂TPL应用程序。例如,当您

c# - 异步方法中的 Await 与 Task.Result

这个问题在这里已经有了答案:WhatisthedifferencebetweenawaitTaskandTask.Result?(2个答案)关闭7年前。执行以下操作有什么区别:asyncTaskmethod(){varr=awaitdynamodb.GetItemAsync(...)returnr.Item;}对比asyncTaskmethod(){vartask=dynamodb.GetItemAsync(...)returntask.Result.Item;}在我的例子中,出于某种原因,只有第二个有效。第一个似乎永远不会结束。

C# HttpWebRequest 底层连接被关闭 : An unexpected error occurred on a send

我一直在谷歌搜索并尝试所有我能找到或想到的解决方案。我尝试加载的站点运行的是TLS1.2,我尝试测试的其他几个站点也是如此,以确保它不是TLS1.2问题。其他网站加载正常。byte[]buffer=Encoding.ASCII.GetBytes("mod=www&ssl=1&dest=account_settings.ws"+"&username="+username.Replace("","20%")+"&password="+password.Replace("","20%"));ServicePointManager.MaxServicePointIdleTime=1000;Se

c# - 在 Task.Run 中使用 CancellationToken 超时不起作用

这个问题在这里已经有了答案:HowtocancelaTaskinawait?(4个答案)关闭2年前。好的,我的问题很简单。为什么这段代码不会抛出TaskCancelledException?staticvoidMain(){varv=Task.Run(()=>{Thread.Sleep(1000);return10;},newCancellationTokenSource(500).Token).Result;Console.WriteLine(v);//thisoutputs10-insteadofthrowingerror.Console.Read();}但是这个有效staticv