草庐IT

ConfigureAwait

全部标签

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

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

c# - 'context' 在 C# async/await 代码中到底意味着什么?

让我们看一些简单的C#async/await代码,其中我在使用ConfigureAwait(false)await之前和之后有一个对象引用(obj)/privateasyncTaskAnAsyncLibraryMethod(SomeObjectobj){Console.WriteLine(Thread.CurrentThread.ManagedThreadId);obj.Name="Harry";//ConfigureAwait(false)似乎意味着不将延续编码回捕获的原始上下文-好的,但这到底是什么意思?我已经尝试了上面的代码并且objIS被正确引用回来(即使它在不同的线程上恢复)

c# - 'context' 在 C# async/await 代码中到底意味着什么?

让我们看一些简单的C#async/await代码,其中我在使用ConfigureAwait(false)await之前和之后有一个对象引用(obj)/privateasyncTaskAnAsyncLibraryMethod(SomeObjectobj){Console.WriteLine(Thread.CurrentThread.ManagedThreadId);obj.Name="Harry";//ConfigureAwait(false)似乎意味着不将延续编码回捕获的原始上下文-好的,但这到底是什么意思?我已经尝试了上面的代码并且objIS被正确引用回来(即使它在不同的线程上恢复)

c# - Task<T>.Convert<TResult> 扩展方法有用还是有隐患?

我正在为GoogleCloudAPI编写客户端库,它具有相当常见的异步帮助程序重载模式:做一些简短的同步工作来设置请求发出异步请求以简单的方式转换结果目前我们为此使用异步方法,但是:转换await的结果在优先级方面很烦人-我们最终需要(awaitfoo.Bar().ConfigureAwait(false)).TransformToBaz()括号很烦人。使用两个语句提高了可读性,但这意味着我们不能使用表达式主体方法。我们偶尔会忘记ConfigureAwait(false)-这在某种程度上可以通过工具解决,但仍然有点难闻Task.ContinueWith听起来是个好主意,但我读过Step

c# - Task<T>.Convert<TResult> 扩展方法有用还是有隐患?

我正在为GoogleCloudAPI编写客户端库,它具有相当常见的异步帮助程序重载模式:做一些简短的同步工作来设置请求发出异步请求以简单的方式转换结果目前我们为此使用异步方法,但是:转换await的结果在优先级方面很烦人-我们最终需要(awaitfoo.Bar().ConfigureAwait(false)).TransformToBaz()括号很烦人。使用两个语句提高了可读性,但这意味着我们不能使用表达式主体方法。我们偶尔会忘记ConfigureAwait(false)-这在某种程度上可以通过工具解决,但仍然有点难闻Task.ContinueWith听起来是个好主意,但我读过Step

c# - 为什么 ConfigureAwait(false) 不是默认选项?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion如您所知,在不需要捕获同步上下文的代码中等待任务时调用Task.ConfigureAwait(false)是个好主意,因为它可以causedeadlocks否则。那么,您需要多久捕获一次同步上下文?我很少练习。在大多数情况下,我使用的“库”代码几乎迫使我一直使用Task.ConfigureAwait(false)。所以我的问题很简单:为什么Task.ConfigureAwait(false

c# - 为什么 ConfigureAwait(false) 不是默认选项?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion如您所知,在不需要捕获同步上下文的代码中等待任务时调用Task.ConfigureAwait(false)是个好主意,因为它可以causedeadlocks否则。那么,您需要多久捕获一次同步上下文?我很少练习。在大多数情况下,我使用的“库”代码几乎迫使我一直使用Task.ConfigureAwait(false)。所以我的问题很简单:为什么Task.ConfigureAwait(false

c# - 我为什么要费心使用 Task.ConfigureAwait(continueOnCapturedContext : false);

考虑以下窗口窗体代码:privateasyncvoidUpdateUIControlClicked(objectsender,EventArgse){this.txtUIControl.Text="Iwillbeupdatedafterawait-ihope!";awaitTask.Delay(5000).ConfigureAwait(continueOnCapturedContext:false);this.txtUIControl.Text="Iamupdatednow.";}这里在第3行抛出异常,因为在await之后代码在非UI线程上执行。ConfigureAwait(false

c# - 我为什么要费心使用 Task.ConfigureAwait(continueOnCapturedContext : false);

考虑以下窗口窗体代码:privateasyncvoidUpdateUIControlClicked(objectsender,EventArgse){this.txtUIControl.Text="Iwillbeupdatedafterawait-ihope!";awaitTask.Delay(5000).ConfigureAwait(continueOnCapturedContext:false);this.txtUIControl.Text="Iamupdatednow.";}这里在第3行抛出异常,因为在await之后代码在非UI线程上执行。ConfigureAwait(false

c# - 使用 ConfigureAwait(false) 和 Task.Run 有什么区别?

我知道建议对库代码中的await使用ConfigureAwait(false),这样后续代码就不会在调用者的执行上下文中运行,这可能是一个UI线程。我也明白,出于同样的原因,应该使用awaitTask.Run(CpuBoundWork)而不是CpuBoundWork()。ConfigureAwait示例publicasyncTaskLoadPage(Uriaddress){using(varclient=newHttpClient())using(varhttpResponse=awaitclient.GetAsync(address).ConfigureAwait(false))us