草庐IT

Asynchronous

全部标签

c# - 如何捕获 lambda 表达式中外部变量的值?

我刚刚遇到了以下行为: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# - 异步等待 Task.Run 与 HttpClient.GetAsync

我是c#5异步功能的新手。我试图了解这两种实现之间的区别:实现1:privatevoidStart(){foreach(varurlinurls){ParseHtml(url);}}privateasyncvoidParseHtml(stringurl){varquery=BuildQuery(url);//BuildQueryissomehelpermethodvarhtml=awaitDownloadHtml(query);//...MyTypeparsedItem=ParseHtml(html);SaveTypeToDB(parsedItem);}privateasyncTask

c# - 异步方法是什么意思?

什么是异步方法。我想我知道,但我一直将它与并行性混淆。我不确定异步方法和并行性之间的区别是什么。还有使用线程类和异步类的区别是什么?编辑一些演示异步、线程和并行之间区别的代码会很有用。 最佳答案 什么是异步方法?当我们谈论可能冗长的操作时,就会讨论异步方法。通常我们需要完成这样的操作才能有意义地继续执行程序,但我们不想“暂停”直到操作完成(因为暂停可能意味着例如UI停止响应,这显然是不可取的)。异步方法是我们调用以开始冗长操作的方法。该方法应该执行启动操作所需的操作并“非常快速”地返回,这样就没有处理延迟。异步方法通常会返回一个to

c# - 如何在 C# 中等待单个事件,超时和取消

所以我的要求是让我的函数等待第一个实例eventAction来自另一个类和另一个线程,并在我的线程上处理它,允许等待被超时或CancellationToken中断.我想创建一个我可以重用的通用函数。我设法创建了几个选项来满足(我认为)我的需要,但两者似乎都比我想象的要复杂。用法需要说明的是,此函数的示例用法如下所示,其中serialDevice在一个单独的线程上吐出事件:vareventOccurred=Helper.WaitForSingleEvent(cancellationToken,statusPacket=>OnStatusPacketReceived(statusPacke

c# - 如果异步委托(delegate)调用永远不会返回会发生什么?

我找到了一个看起来不错的示例,说明如何使用超时异步调用委托(delegate)...http://www.eggheadcafe.com/tutorials/aspnet/847c94bf-4b8d-4a66-9ae5-5b61f049019f/basics-make-any-method-c.aspx.总之,它使用带有超时的WaitOne来确定调用是否在超时到期之前没有返回。我还知道您应该有一个EndInvoke来匹配每个BeginInvoke。那么如果等待超时到期会发生什么?我们(大概)不想调用EndInvoke,因为那样会阻塞。代码可以继续做“其他事情”,但我们泄露了什么吗?是否

c# - 有什么方法可以处理 ASMX 服务背后的异步/等待吗?

我有一个Web应用程序,它为JSON和ASMXWeb服务提供WCFRESTAPI。该应用程序已经存在了几年。它基于ASP.NET2.0,但在几年前升级到.NET4.0,我刚刚升级到.NET4.5以便能够使用新的异步框架。应用程序背后是一些遗留服务,我意识到通过异步提高性能的潜力很大。我在整个应用程序中实现了异步,并且一切都通过WCFRESTAPI完美运行。我发现ASMXAPI失败时为时已晚,我想要这样的方法:[WebMethod(Description="TakesaninternaltripIDasparameter.")]asyncpublicTaskGetTrip(inttrip

c# - 使用 `async` lambda 和 `Task.Run()` 是多余的吗?

我刚遇到一些代码,例如:vartask=Task.Run(async()=>{awaitFoo.StartAsync();});task.Wait();(不,我不知道Foo.StartAsync()的内部工作原理)。我最初的react是摆脱async/await并重写为:vartask=Foo.StartAsync();task.Wait();这是否正确(同样,对Foo.StartAsync()一无所知)。This回答Whatdifferencedoesitmake-runningan'async'actiondelegatewithaTask.Run...似乎表明在某些情况下它可能有

c# - 从 SqlDataReader 异步读取每个字段有什么好处吗?

异步读取字段有什么好处吗?假设我有以下内容:SqlDataReaderreader=awaitcmd.ExecuteReaderAsync();while(awaitreader.ReadAsync()){try{if(reader.IsDBNull(COL_NAME)){continue;}user=newUser();user.Id=reader.GetInt32(COL_ID);使用IsDBNullAsync和GetInt32Async等是否会给现实世界带来任何好处? 最佳答案 在浏览了一些反射器之后,这里有趣的方法(GetF

c# - 如何安全地混契约(Contract)步和异步代码?

这个问题在这里已经有了答案:Writeawelldesignedasync/non-asyncAPI(3个答案)关闭2年前。我有这个完全同步的库。它公开了同步方法,我有客户在使用它。我将底层实现更改为异步,并为任何想要使用它的人公开了异步方法。但是现在我有很多重复的代码。异步代码似乎表现更好。我希望现有客户能够利用它,并且我希望消除代码重复。是否有任何安全的方法来保持同步签名并调用异步实现?我特别害怕在调用.Result和.Wait时出现死锁。

c# - 使用 async/await 进行设计——一切都应该是异步的吗?

假设我有一个接口(interface)方法实现为publicvoidDoSomething(Useruser){if(user.Gold>1000)ChatManager.Send(user,"Youarerich:"+user.Gold);}一段时间后我意识到我想改变它:publicasyncTaskDoSomething(Useruser){if(user.Gold>1000)ChatManager.Send(user,"Youarerich:"+user.Gold);if(!user.HasReward){using(vardbConnection=awaitDbPool.Ope