草庐IT

task-parallel-library

全部标签

c# - 尝试在 : await Task. 之外捕获 Run(()

在awaitTask.Run(()=>之外的trycatch是否有意义,或者仅在await内部使用它们?privateasyncvoidTest(){try{awaitTask.Run(()=>{try{DoingSomething();}catch(Exceptionex){log.Error(ex.Message);}});}catch(Exceptionex){log.Error(ex.Message);}} 最佳答案 如果你处理Exception在委托(delegate)内部(在您的情况下仅用于记录目的),await在正常情

c# - await Task.CompletedTask 是为了什么?

我使用WindowsTemplateStudio创建了UWP应用程序在Build2017上引入的。下面的类是它生成的代码的一部分。publicclassSampleModelService{publicasyncTask>GetDataAsync(){awaitTask.CompletedTask;//();data.Add(newSampleModel{Title="Loremipsumdolorsit1",Description="Loremipsumdolorsitamet",Symbol=Symbol.Globe});data.Add(newSampleModel{Title=

c# - 即使在 Asp.Net 流程中使用 ConfigureAwait(false) 后也会出现死锁

即使在使用ConfigureAwait(false)之后我仍然遇到死锁,下面是示例代码。根据示例http://blog.stephencleary.com/2012/02/async-and-await.html(#AvodingContext),这不应该是死锁。这是我的课:publicclassProjectsRetriever{publicstringGetProjects(){...varprojects=this.GetProjects(uri).Result;......}privateasyncTask>GetProjects(Uriuri){returnawaitthis

c# - 在基于事件的异步模式上使用任务并行库

我正在编写一个网络应用程序。消息是这样通过传输发送的:Network.SendMessage(newFirstMessage());我可以注册一个事件处理程序,以便在该消息类型到达时调用,如下所示:Network.RegisterMessageHandler(OnFirstMessageReceived);事件被触发:publicvoidOnFirstMessageReceived(EventArgse){}我正在为我的网络应用程序编写一个自定义身份验证过程,它需要大约五条消息才能完成。如果不使用任务并行库,我将不得不在前面的事件处理程序中编写每个过程的下一步代码,如下所示:publi

c# - 嵌套的 Parallel.ForEach 循环在同一个列表中?

我需要并行化一个对列表中的元素进行详尽的成对比较的方法。串行实现很简单:foreach(varelement1inlist)foreach(varelement2inlist)foo(element1,element2);在这种情况下,foo不会改变element1或element2的状态。我知道简单地执行嵌套的Parallel.ForEach语句是不安全的:Parallel.ForEach(list,delegate(Aelement1){Parallel.ForEach(list,delegate(Aelement2){foo(element1,element2);});});使用

c# - 为什么 Task.WhenAny 没有抛出预期的 TimeoutException?

请注意以下简单代码:classProgram{staticvoidMain(){varsw=newStopwatch();sw.Start();try{Task.WhenAny(RunAsync()).GetAwaiter().GetResult();}catch(TimeoutException){Console.WriteLine("Timedout");}Console.WriteLine("Elapsed:"+sw.Elapsed);Console.WriteLine("PressEntertoexit");Console.ReadLine();}privatestaticas

c# - System.Threading.Tasks 中的 NullReferenceException 调用 HttpClient.GetAsync(url)

我的MVC4.0应用程序有一个奇怪的问题。我使用REST网络服务(AmazonAssociate)。我创建了一种方法,可以在任何地方使用。缩短版是这样的:privateasyncTaskGetRequest(stringurl){stringmyresponse;HttpResponseMessageresponse=null;HttpClientclient=newHttpClient();try{response=awaitclient.GetAsync(url);myresponse=response.Content.ToString();if(myresponse.Contai

c# - 将循环转换为任务

我有以下同步代码:foreach(varstepinresult){step.Run();}我试图将其转换为任务,但未能成功。我尝试像这样使用Task.WhenAll转换它(并且我确实将异步附加到方法签名):vartasks=newList();foreach(varstepinresult){tasks.Add(newTask(()=>step.Run()));}awaitTask.WhenAll(tasks);这会立即返回并且不会执行Run()方法。然后我尝试将其转换为以下代码:vartasks=newList();foreach(varstepinresult){tasks.Ad

c# - 多个线程向一个列表添加元素。为什么列表中的项目总是比预期的少?

下面的代码解释了我的问题。我知道列表不是线程安全的。但这背后的“真正”原因是什么?classProgram{staticvoidMain(string[]args){ListstrCol=newList();for(inti=0;i{AddElements(strCol);}).ContinueWith((t)=>{WriteCount(strCol,id.ToString());});}Console.ReadLine();}privatestaticvoidWriteCount(ListstrCol,stringid){Console.WriteLine(string.Format

c# - Task.Run 和 Func<>

如何运行一个返回值并接受参数的任务?我看到有一个重载方法Task.Run(Func)但是我怎样才能在那里传递参数呢? 最佳答案 Func不带参数。通常,您会使用lambda表达式捕获参数。例如:publicvoidDoSomething(stringtext){Tasktask=Task.Run(()=>text.Length);...}在这里text是一个捕获的变量...所以即使你只是创建一个Func,它使用方法参数。 关于c#-Task.Run和Func,我们在StackOverfl