【发布时间】:2020-07-18 16:28:43
【问题描述】:
我一直在阅读有关类似任务和等待类型的文章。我想我已经很好地掌握了它的基本机制(awaiter、asyncmethodbuilder ......),但是当我尝试理解 ConfigureAwait(false) 在这种情况下的用法时(如果这甚至可能的话)有些不对劲。
我的问题是:
ConfigureAwait 是否为“真正的”任务保留,意味着 SynchronizationContext 的使用与否?
如果是这样,并且假设您正在编写一个通用库,该库公开了它自己的类似任务类型的实现,您是否应该在代码遇到任务时只使用 ConfigureAwait(false)?
谢谢。
【问题讨论】:
-
我的问题:为什么?你有什么具体的用例需要使用基于任务的异步编程,但不能使用内置的任务类?
-
您知识渊博的答案是否取决于原因?问题是这是否可能。在我对此事的调查中,我没有找到答案。
-
Is ConfigureAwait reserved for "true" Tasks- 不,不是。请参阅devblogs.microsoft.com/dotnet/configureawait-faq,“ConfigureAwait(false) 做什么?”部分。 -
是的,任何类型的任务都是可能的......但你必须写它。请参阅此 Marc 砾石库。特别寻找
ConfiguredYieldAwaitable,这是一种配置Task.Yield的方法,它有一个自定义的等待者。 mgravell.github.io/PooledAwait -
还有一些关于这个问题的答案的自定义配置的可等待对象的例子stackoverflow.com/q/51375326/491907
标签: c# async-await task-parallel-library synchronizationcontext configureawait