草庐IT

ConfigureAwait

全部标签

c# - Windows 8 - 如何正确获取嵌套文件夹?

我有一个绑定(bind)到从磁盘加载图像的对象集合的GridView。对象在可见时被放入堆栈,图像按顺序从堆栈中加载。问题是GetFolderAsync()在包含对象的ScrollViewer停止滚动之前不会返回。代码如下:publicstaticasyncTaskGetFileFolderAsync(StringfileUrl){try{stringfilePathRelative=DownloadedFilePaths.GetRelativeFilePathFromUrl(fileUrl);string[]words=filePathRelative.Split('\\');Sto

c# - HttpClient PostAsync 不返回

我已经看到很多关于此的问题,并且都指向我使用ConfigureAwait(false),但即使这样做之后,它仍然没有返回任何响应。当我运行调试器时,代码在PostAsync处停止并且不会继续我的代码。我在这里做错了什么吗?跟我通过HTTPS调用API有关系吗?代码如下:publicasyncstaticTaskAddAsync(Cardcard){HttpClientclient=newHttpClient();client.DefaultRequestHeaders.Authorization=newSystem.Net.Http.Headers.AuthenticationHead

c# - 是否有比在异步方法中调用 ConfigureAwait(false) 更具可读性的替代方法?

我目前正在编写大量async库代码,并且我知道在每次异步调用之后添加ConfigureAwait(false)的做法,以便避免将延续代码编码回原始(通常是UI)线程上下文。由于我不喜欢未标记的bool参数,因此我倾向于将其写为ConfigureAwait(continueOnCapturedContext:false)。我添加了一个扩展方法以使其更具可读性(并减少了输入):publicstaticclassTaskExtensions{publicstaticConfiguredTaskAwaitableWithoutCapturingContext(thisTasktask){ret

c# - 将 SynchronizationContext 设置为 null 而不是使用 ConfigureAwait(false)

我有一个公开方法的同步和异步版本的库,但在幕后,它们都必须调用异步方法。我无法控制该异步方法(它使用async/await并且不使用ConfigureAwait(false)),也无法替换它。代码在ASP.NET请求的上下文中执行,因此为了避免死锁,这是我所做的:varcapturedContext=SynchronizationContext.Current;try{//Wipethesynccontext,sothatthebadlibrarycodewon'tfindit//Thatway,weavoidthedeadlockSynchronizationContext.SetS

c# - 返回任务或等待和 ConfigureAwait(false)

假设有这样一个方法的服务库publicasyncTaskGetPersonAsync(Guidid){returnawaitGetFromDbAsync(id);}遵循SynchronizationContext的最佳实践更好用publicasyncTaskGetPersonAsync(Guidid){returnawaitGetFromDbAsync(id).ConfigureAwait(false);}但是当你只有一个操作时(我认为)最好直接返回任务。参见Attheendofanasyncmethod,shouldIreturnorawait?publicTaskGetPerson

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# - Console/Win 服务应用程序不需要 ConfigureAwait(false),对吗?

我使用async/await有一段时间了,但最近深入研究,并阅读了很多最佳实践提示,默认总是使用ConfigureAwait(false)防止死锁,提高性能。我只是想确保我没有遗漏任何东西,因为我认为这仅适用于实际当前SynchronizationContext或TaskScheduler正在运行的情况,对吗?如果我有一个正在响应消息/命令/等的Windows服务应用程序。异步地,它总是只使用默认的调度程序=可能等待完成的线程池线程将执行延续,因此没有死锁,使用ConfigureAwait(false)也不会产生性能差异,正确?不是我不能把它放在那里,而是我非常讨厌嘈杂的代码.....

c# - UOW - 在上一个异步操作完成之前,第二个操作在此上下文中开始

我正在尝试下面的代码,它有两个部分,一个是通过棱镜导航。当允许导航时,我会异步启动深度加载,但每次都有一个新的上下文。在后面的代码中,我想取消未完成此加载的挂起导航,但下面的代码甚至不起作用,所以取消是以后的事;-)导航逻辑:这里没有问题publicvoidOnNavigatedTo(NavigationContextnavigationContext){intrelatieId=(int)navigationContext.Parameters["RelatieId"];if(_relatie!=null&&_relatie.RelatieId==relatieId)return;l

c# - 我应该在每个等待的操作上调用 ConfigureAwait(false)

我读了这篇文章https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html-但是我看到了一个矛盾:我知道UI线程死锁的问题,因为UI线程阻塞等待异步操作完成,但相同的异步操作同步到UI线程上下文-因此异步操作无法进入UI线程,因此UI线程不会停止等待。文章告诉我们解决方法是不要在UI线程上阻塞,否则您需要使用ConfigureAwait(false)everywhere:Youwouldhavetouseforeveryawaitinthetransitiveclosureofallmethodscalledb

c# - 重温 Task.ConfigureAwait(continueOnCapturedContext : false)

阅读时间太长。使用Task.ConfigureAwait(continueOnCapturedContext:false)可能会引入冗余线程切换。我正在寻找一个一致的解决方案。长版。ConfigureAwait(false)背后的主要设计目标是减少冗余SynchronizationContext.Postawait的持续回调,在可能的情况。这通常意味着更少的线程切换和更少的UI线程工作。然而,它并不总是如何工作的。例如,有一个3rd方库实现了SomeAsyncApi应用程序接口(interface)。请注意ConfigureAwait(false)由于某种原因,在这个库中的任何地方都没