草庐IT

Async-await

全部标签

c# - 为什么要对 QueueBackgroundWorkItem 使用异步?

在ASP.NETQueueBackgroundWorkItem方法中使用async有什么好处?HostingEnvironment.QueueBackgroundWorkItem(asynccancellationToken=>{varresult=awaitLongRunningMethodAsync();//etc.});我的理解是异步函数是用来防止长时间运行的任务阻塞主线程的。但是,在这种情况下,我们不是在它自己的线程中执行任务吗?与非异步版本相比有什么优势:HostingEnvironment.QueueBackgroundWorkItem(cancellationToken=

c# - 在 ASP.NET 事件处理程序中使用 async/await 是否安全?

当我遇到这个时,我正在用ASP.NET编写一些代码:protectedasyncvoidsomeButtonClickHandler(...){if(awaitblah)doSomething();elsedoSomethingElse();}询问后this问题我对async/await的工作原理有了更好的理解。但后来我突然想到,以上述方式使用async/await是否安全?我的意思是在调用awaitblah之后,调用者继续执行。这意味着它可能会在awaitblah完成之前将响应返回给客户端。这是正确的吗?如果是这种情况,doSomething()/doSomethingElse()会

c# - 在什么情况下 TaskCompletionSource.SetResult() 会同步运行延续?

最初我认为所有的延续都是在线程池上执行的(给定一个默认的同步上下文)。然而,当我使用TaskCompletionSource时,情况似乎并非如此。我的代码看起来像这样:TaskFoo(){_tcs=newTaskCompletionSource();return_tcs.Task;}asyncvoidBar(){Console.WriteLine(Thread.Current.ManagedThreadId);Console.WriteLine($"{Thread.Current.ManagedThreadId}-{awaitFoo()}");}Bar在特定线程上被调用并且TaskCo

c# - HttpClient.PostAsJsonAsync 永远看不到帖子何时成功并响应

我们正在使用HttpClient将json发布到restfulweb服务。在一个例子中,我们遇到了一些让我们感到困惑的事情。使用postman、fiddler等工具,我们可以发布到端点并查看它是否正常工作。当我们对HttpClient.PostAsJsonAsync做同样的事情时,我们可以在我们发布到的软件中验证它接收到的数据是否正常。但是,我们的PostAsJsonAsync最终总是会超时而不是给我们响应。我们已经与创建我们正在使用的服务的团队合作,加上我们这边的额外测试,但我们还无法真正使该服务超时。每次我们用HttpClient发帖时,我们就可以验证我们发帖的目标软件确实获取了数

c# - 我如何对这个(正确地)抛出异常的异步方法进行单元测试?

我在接口(interface)中有以下方法..Task>SearchAsync(TUsearchOptions);效果很好。现在我正在尝试进行单元测试以测试何时出现问题-代码会抛出异常。在这种情况下,我已将我的方法设置为抛出HttpRequestException。我的单元测试没有说我抛出了那个异常..varresult=Should.Throw(async()=>awaitservice.SearchAsync(searchOptions));单元测试的错误信息是Shouldly.ChuckedAWobblyvarresult=ShouldthrowSystem.Net.Http.H

c# - 在等待 List<Task> 中的所有任务完成时显示进度

我目前正在尝试在一行的末尾连续打印点作为不确定进度的一种形式,同时运行大量任务,使用以下代码:start=DateTime.Now;Console.Write("*Processingvariables");TaskentireTask=Task.WhenAll(tasks);Taskprogress=newTask(()=>{while(!entireTask.IsCompleted){Console.Write(".");System.Threading.Thread.Sleep(1000);}});progress.Start();entireTask.Wait();timeDi

c# - 等待异步 TaskEx

什么是TaskEx?在http://www.i-programmer.info/programming/c/1514-async-await-and-the-ui-problem.html?start=1或awaitTaskEx.Delay或Awaitasyncclarification.我用TaskDoWork(){returnTask.Run(()=>{for(inti=0;i示例使用这个TaskDoWork(){returnTaskEx.Run(()=>{for(inti=0;i我这样调用它awaitDoWork();如果您只使用Task,await什么也不返回,也没有响应。如果

c# - PagedList 和异步

我在我的View中使用PagedList,但我的脚手架Controller是使用这种默认索引操作生成的:publicasyncTaskIndex(){returnView(awaitdb.Claimants.ToListAsync());}我没有找到PagedList与async一起工作的扩展。我的方法必须更改为如下形式:publicActionResultIndex(int?page){varclaimants=db.Claimants.OrderBy(b=>b.Name);varnotNullPage=page??1;returnView(claimants.ToPagedList

c# - 异步和并行下载文件

编辑我更改了问题的标题以反射(reflect)我遇到的问题,但也提供了有关如何轻松实现此问题的答案。我正在尝试使第二种方法返回Task而不是Task与第一种方法一样,但由于尝试修复它,我遇到了一系列错误。我添加了return之前awaitbody(partition.Current);然后它要求我在下面添加一个返回语句,所以我添加了returnnull以下但是现在select语句提示它无法从查询中推断出类型参数我改Task.Run至Task.Run但没有成功。我该如何解决?第一个方法来自http://blogs.msdn.com/b/pfxteam/archive/2012/03/05

c# - MessageQueue 和异步/等待

我只想在异步方法中接收我的消息!它卡住了我的用户界面publicasyncvoidProcessMessages(){MessageQueueMyMessageQueue=newMessageQueue(@".\private$\MyTransactionalQueue");MyMessageQueue.Formatter=newXmlMessageFormatter(newType[]{typeof(string)});while(true){MessageQueueTransactionMessageQueueTransaction=newMessageQueueTransacti