草庐IT

异步通信

全部标签

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# - ASP.NET Core 的 ActionFilterAttribute 中的异步 OnActionExecuting

ASP.NETCore的ActionFilterAttribute有这些:publicvirtualvoidOnActionExecuting(ActionExecutingContextcontext);publicvirtualvoidOnActionExecuted(ActionExecutedContextcontext);publicvirtualTaskOnActionExecutionAsync(ActionExecutingContextcontext,ActionExecutionDelegatenext);我需要OnActionExecuting的异步版本,它不存在

c# - 从以 Task 为返回类型的非异步方法返回什么?

假设我有一个不是异步但返回一个Task的方法(因为定义来自一个也用于异步实现的接口(interface))publicTaskDoWorkAsync(Guidid){//dotheworkreturn...;}返回的最佳对象是什么?我目前的选择:returnTask.Yield();returnTask.FromResult(null);//anyoftheotherbutcachedinastaticfieldandreused. 最佳答案 在Microsoft.net4.6中,Task类具有用于此目的的静态属性。任务.Compl

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

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

c# - 如何一次异步读取标准输出流和标准错误流

我想以控制台中的形式读取流程的输出(标准输出与标准错误混合在一个流中)。有什么办法吗?我在考虑使用ProcessStartInfo.UseShellExecute=true;但是我无法异步读取输出。如果我设置process.ProcessStartInfo.UseShellExecute=false;process.StartInfo.RedirectStandardOutput=true;process.OutputDataReceived+=newDataReceivedEventHandler(partialOutputHandler);然后我可以读取标准输出(我可以为标准错误做

c# - 如何使用异步等待模式初始化对象

我试图在我的服务类中遵循RAII模式,这意味着当一个对象被构建时,它就被完全初始化了。但是,我在使用异步API时遇到了困难。相关类的结构如下所示classServiceProvider:IServiceProvider//Isonlyusedthroughthisinterface{publicintImportantValue{get;set;}publiceventEventHandlerImportantValueUpdated;publicServiceProvider(IDependency1dep1,IDependency2dep2){//IDependency1provi

c# - 为什么 EF 6 教程使用异步调用?

有关如何将EF6与MVC5结合使用的最新EF教程似乎倾向于使用对数据库的异步调用,例如:Departmentdepartment=awaitdb.Departments.FindAsync(id);这是新标准/最佳实践吗?我不确定这种使用ASP.NETMVC的开发方式有什么好处。谁能评论一下这个模式,这是微软正在推广的新标准吗? 最佳答案 为了决定是异步还是同步,比较yield和成本:异步:几乎从不用异步耗尽线程池(情况必须是极端的)几乎任意级别的并发(并发请求和操作)每个线程节省1MB内存借助SynchronizationCont

c# - QueueUserWorkItem() 和 BeginInvoke() 之间的区别是什么,用于执行不需要返回类型的异步事件

根据我的BeginInvoke()/EndInvoke()问题,Delegate.BeginInvoke()和使用QueueUserWorkItem()异步调用委托(delegate)之间在性能/其他方面是否存在重大差异? 最佳答案 我能想到的关于QueueUserWorkItem的主要事情是你必须使用WaitCallback委托(delegate)类型,如果你已经有一个SomeRandomDelegate实例和一些参数。好消息是你可以用闭包来解决这个问题:ThreadPool.QueueUserWorkItem(delegate{

c# - 带有 yield 返回的异步任务<IEnumerable>?

以下方法无法编译。替代方案?publicstaticasyncTask>GetRecordsAsync(thisTransactiontransaction,stringcommandText,paramsSqlParameter[]parameters){//GetaSqlDataReadervarreader=awaittransaction.GetReaderAsync(commandText,parameters);varfieldCount=-1;//Beginiteratingthroughrecordsasynchronouslywhile(awaitreader.Rea

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

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